Gusto Capabilities

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

Sort
Expand

Reviews access at Gusto via Okta, IAM, and Jira.

naftiko: "0.5"
info:
  label: "Access Review Pipeline"
  description: "Reviews access at Gusto via Okta, IAM, and Jira."
  tags:
    - security
    - access-management
    - okta
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: access-rev
      port: 8080
      tools:
        - name: review
          description: "Review access at Gusto."
          inputParameters:
            - name: dept
              in: body
              type: string
              description: "Department."
          steps:
            - name: ent
              type: call
              call: "okta.get-users"
              with:
                dept: "{{dept}}"
            - name: compare
              type: call
              call: "iam.compare"
              with:
                data: "{{ent.data}}"
            - name: flag
              type: call
              call: "iam.flag"
              with:
                violations: "{{compare.violations}}"
            - name: fix
              type: call
              call: "jira.create-issue"
              with:
                project: "IAM"
                summary: "Violations in {{dept}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://gusto.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: iam
      baseUri: "https://iam.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.iam_token"
      resources:
        - name: reviews
          path: "/compare"
          operations:
            - name: compare
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Executes a SQL query against Gusto's Amazon Redshift cluster for historical payroll analytics and large-scale data processing.

naftiko: "0.5"
info:
  label: "Amazon Redshift Analytics Query"
  description: "Executes a SQL query against Gusto's Amazon Redshift cluster for historical payroll analytics and large-scale data processing."
  tags:
    - data-analytics
    - amazon-redshift
capability:
  exposes:
    - type: mcp
      namespace: redshift-analytics
      port: 8080
      tools:
        - name: run-redshift-query
          description: "Execute a SQL query against Amazon Redshift."
          inputParameters:
            - name: sql_statement
              in: body
              type: string
              description: "The SQL query."
            - name: database
              in: body
              type: string
              description: "The Redshift database name."
          call: "redshift.execute-statement"
          with:
            sql: "{{sql_statement}}"
            database: "{{database}}"
  consumes:
    - type: http
      namespace: redshift
      baseUri: "https://redshift-data.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_redshift_token"
      resources:
        - name: statements
          path: "/"
          operations:
            - name: execute-statement
              method: POST

Manages API deprecation at Gusto via consumer identification, notices, and tracking.

naftiko: "0.5"
info:
  label: "API Deprecation Pipeline"
  description: "Manages API deprecation at Gusto via consumer identification, notices, and tracking."
  tags:
    - api-management
    - communications
    - governance
capability:
  exposes:
    - type: mcp
      namespace: api-sunset
      port: 8080
      tools:
        - name: notify-sunset
          description: "Manage API sunset at Gusto."
          inputParameters:
            - name: api
              in: body
              type: string
              description: "API name."
            - name: date
              in: body
              type: string
              description: "Sunset date."
          steps:
            - name: consumers
              type: call
              call: "api-gw.consumers"
              with:
                api: "{{api}}"
            - name: notify
              type: call
              call: "email.batch"
              with:
                to: "{{consumers.emails}}"
                subject: "{{api}} sunset: {{date}}"
            - name: track
              type: call
              call: "analytics.usage"
              with:
                api: "{{api}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "API"
                summary: "Sunset {{api}} by {{date}}"
  consumes:
    - type: http
      namespace: api-gw
      baseUri: "https://api-gw.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.api_gw_token"
      resources:
        - name: consumers
          path: "/apis/{{api}}/consumers"
          inputParameters:
            - name: api
              in: path
          operations:
            - name: consumers
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              method: POST
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: usage
          path: "/api-usage"
          operations:
            - name: usage
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://gusto.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Checks ArgoCD sync at Gusto.

naftiko: "0.5"
info:
  label: "ArgoCD Sync Status"
  description: "Checks ArgoCD sync at Gusto."
  tags:
    - devops
    - argocd
    - gitops
capability:
  exposes:
    - type: mcp
      namespace: argocd
      port: 8080
      tools:
        - name: check-sync
          description: "Check ArgoCD at Gusto."
          inputParameters:
            - name: app
              in: body
              type: string
              description: "App name."
          call: "argocd.get-app"
          with:
            name: "{{app}}"
          outputParameters:
            - name: sync
              type: string
              mapping: "$.status.sync.status"
  consumes:
    - type: http
      namespace: argocd
      baseUri: "https://argocd.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.argocd_token"
      resources:
        - name: apps
          path: "/applications/{{name}}"
          inputParameters:
            - name: name
              in: path
          operations:
            - name: get-app
              method: GET

Retrieves an Asana project's current status including task counts, completion percentage, and milestone dates for cross-functional project tracking.

naftiko: "0.5"
info:
  label: "Asana Project Status"
  description: "Retrieves an Asana project's current status including task counts, completion percentage, and milestone dates for cross-functional project tracking."
  tags:
    - project-management
    - asana
capability:
  exposes:
    - type: mcp
      namespace: project-mgmt
      port: 8080
      tools:
        - name: get-project-status
          description: "Look up an Asana project by ID. Returns task counts, completion rate, and due date."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "The Asana project ID."
          call: "asana.get-project"
          with:
            project_id: "{{project_id}}"
  consumes:
    - type: http
      namespace: asana
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: projects
          path: "/projects/{{project_id}}"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: get-project
              method: GET

Retrieves AWS cost and usage summary for Gusto's cloud infrastructure by service and time period.

naftiko: "0.5"
info:
  label: "AWS Cost Summary"
  description: "Retrieves AWS cost and usage summary for Gusto's cloud infrastructure by service and time period."
  tags:
    - infrastructure
    - cloud
    - amazon-web-services
capability:
  exposes:
    - type: mcp
      namespace: cloud-cost
      port: 8080
      tools:
        - name: get-aws-cost
          description: "Retrieve AWS cost summary for a date range."
          inputParameters:
            - 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: "aws.get-cost-and-usage"
          with:
            start: "{{start_date}}"
            end: "{{end_date}}"
  consumes:
    - type: http
      namespace: aws
      baseUri: "https://ce.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_ce_token"
      resources:
        - name: cost
          path: "/"
          operations:
            - name: get-cost-and-usage
              method: POST

Checks S3 bucket at Gusto.

naftiko: "0.5"
info:
  label: "S3 Bucket Stats"
  description: "Checks S3 bucket at Gusto."
  tags:
    - storage
    - aws
    - s3
capability:
  exposes:
    - type: mcp
      namespace: s3-stats
      port: 8080
      tools:
        - name: get-bucket
          description: "Get bucket stats at Gusto."
          inputParameters:
            - name: bucket
              in: body
              type: string
              description: "Bucket."
          call: "s3.get-stats"
          with:
            bucket: "{{bucket}}"
          outputParameters:
            - name: objects
              type: number
              mapping: "$.NumberOfObjects"
  consumes:
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_token"
      resources:
        - name: buckets
          path: "/{{bucket}}?metrics"
          inputParameters:
            - name: bucket
              in: path
          operations:
            - name: get-stats
              method: GET

Checks build at Gusto.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Check"
  description: "Checks build at Gusto."
  tags:
    - devops
    - azure-devops
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: azdo-build
      port: 8080
      tools:
        - name: check-build
          description: "Check build at Gusto."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Project."
            - name: build_id
              in: body
              type: string
              description: "Build ID."
          call: "azdo.get-build"
          with:
            project: "{{project}}"
            build_id: "{{build_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/gusto.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds/{{build_id}}"
          inputParameters:
            - name: project
              in: path
            - name: build_id
              in: path
          operations:
            - name: get-build
              method: GET

Checks Azure resource at Gusto.

naftiko: "0.5"
info:
  label: "Azure Resource Health"
  description: "Checks Azure resource at Gusto."
  tags:
    - cloud
    - azure
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: az-health
      port: 8080
      tools:
        - name: check-resource
          description: "Check resource at Gusto."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Resource ID."
          call: "azure.get-health"
          with:
            id: "{{resource_id}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.properties.availabilityState"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: health
          path: "/{{id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-health
              method: GET

Verifies backups at Gusto.

naftiko: "0.5"
info:
  label: "Backup Verification Pipeline"
  description: "Verifies backups at Gusto."
  tags:
    - database
    - backup
    - operations
capability:
  exposes:
    - type: mcp
      namespace: backup-verify
      port: 8080
      tools:
        - name: verify-backups
          description: "Verify backups at Gusto."
          inputParameters:
            - name: db
              in: body
              type: string
              description: "Database."
            - name: date
              in: body
              type: string
              description: "Backup date."
          steps:
            - name: status
              type: call
              call: "backup.get-status"
              with:
                db: "{{db}}"
                date: "{{date}}"
            - name: verify
              type: call
              call: "backup.verify"
              with:
                id: "{{status.backup_id}}"
            - name: log
              type: call
              call: "snowflake.query"
              with:
                query: "INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#dba"
                text: "Backup {{db}}: {{verify.status}}"
  consumes:
    - type: http
      namespace: backup
      baseUri: "https://backup.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.backup_token"
      resources:
        - name: backups
          path: "/databases/{{db}}/status"
          inputParameters:
            - name: db
              in: path
          operations:
            - name: get-status
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves an employee's benefits enrollment status from Salesforce, returning active plans, coverage levels, dependents, and enrollment period.

naftiko: "0.5"
info:
  label: "Benefits Enrollment Status"
  description: "Retrieves an employee's benefits enrollment status from Salesforce, returning active plans, coverage levels, dependents, and enrollment period."
  tags:
    - benefits
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: benefits
      port: 8080
      tools:
        - name: get-enrollment-status
          description: "Look up an employee's benefits enrollment. Returns active plans, coverage, and dependents."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The employee identifier."
          call: "salesforce.get-enrollment"
          with:
            employee_id: "{{employee_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: enrollments
          path: "/query?q=SELECT+Id,Plan__c,CoverageLevel__c,Dependents__c,Status__c+FROM+BenefitsEnrollment__c+WHERE+EmployeeId__c='{{employee_id}}'"
          inputParameters:
            - name: employee_id
              in: query
          operations:
            - name: get-enrollment
              method: GET

Analyzes budget variance at Gusto via Oracle, Workday, and Slack.

naftiko: "0.5"
info:
  label: "Budget Variance Pipeline"
  description: "Analyzes budget variance at Gusto via Oracle, Workday, and Slack."
  tags:
    - finance
    - budget
    - oracle
    - workday
capability:
  exposes:
    - type: mcp
      namespace: budget-var
      port: 8080
      tools:
        - name: analyze-variance
          description: "Check budget variance at Gusto."
          inputParameters:
            - name: cc
              in: body
              type: string
              description: "Cost center."
            - name: period
              in: body
              type: string
              description: "Period."
          steps:
            - name: actuals
              type: call
              call: "oracle.get-actuals"
              with:
                cc: "{{cc}}"
                period: "{{period}}"
            - name: budget
              type: call
              call: "workday.get-budget"
              with:
                cc: "{{cc}}"
            - name: compute
              type: call
              call: "analytics.variance"
              with:
                a: "{{actuals.total}}"
                b: "{{budget.total}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance"
                text: "Variance {{cc}}: ${{compute.variance}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: fin
          path: "/actuals"
          operations:
            - name: get-actuals
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd5.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: budgets
          path: "/budgets"
          operations:
            - name: get-budget
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: var
          path: "/compute"
          operations:
            - name: variance
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Plans capacity at Gusto by collecting utilization and forecasting.

naftiko: "0.5"
info:
  label: "Capacity Planning Pipeline"
  description: "Plans capacity at Gusto by collecting utilization and forecasting."
  tags:
    - infrastructure
    - capacity-planning
    - forecasting
capability:
  exposes:
    - type: mcp
      namespace: capacity
      port: 8080
      tools:
        - name: plan-capacity
          description: "Plan capacity at Gusto."
          inputParameters:
            - name: resource
              in: body
              type: string
              description: "Resource type."
            - name: months
              in: body
              type: number
              description: "Forecast months."
          steps:
            - name: util
              type: call
              call: "monitoring.get-util"
              with:
                resource: "{{resource}}"
            - name: forecast
              type: call
              call: "analytics.forecast"
              with:
                current: "{{util.pct}}"
                months: "{{months}}"
            - name: procure
              type: call
              call: "servicenow.create-request"
              with:
                type: "capacity"
                resource: "{{resource}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "capacity"
  consumes:
    - type: http
      namespace: monitoring
      baseUri: "https://monitoring.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: util
          path: "/resources/{{resource}}/util"
          inputParameters:
            - name: resource
              in: path
          operations:
            - name: get-util
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: forecast
          path: "/demand"
          operations:
            - name: forecast
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Monitors cert expiry at Gusto.

naftiko: "0.5"
info:
  label: "Certificate Expiry Pipeline"
  description: "Monitors cert expiry at Gusto."
  tags:
    - security
    - certificates
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: cert-monitor
      port: 8080
      tools:
        - name: check-certs
          description: "Monitor certs at Gusto."
          inputParameters:
            - name: domains
              in: body
              type: string
              description: "Domains to check."
          steps:
            - name: scan
              type: call
              call: "cert-scanner.scan"
              with:
                domains: "{{domains}}"
            - name: filter
              type: call
              call: "analytics.filter-expiring"
              with:
                certs: "{{scan.results}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "{{filter.count}} certs expiring"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#security"
                text: "Cert alert: {{filter.count}} expiring"
  consumes:
    - type: http
      namespace: cert-scanner
      baseUri: "https://certs.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cert_token"
      resources:
        - name: scans
          path: "/scan"
          operations:
            - name: scan
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Routes changes at Gusto through ServiceNow and CAB approval.

naftiko: "0.5"
info:
  label: "Change Management Pipeline"
  description: "Routes changes at Gusto through ServiceNow and CAB approval."
  tags:
    - change-management
    - servicenow
    - itil
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: process-change
          description: "Process changes at Gusto."
          inputParameters:
            - name: change_id
              in: body
              type: string
              description: "Change ID."
            - name: date
              in: body
              type: string
              description: "Date."
          steps:
            - name: get
              type: call
              call: "servicenow.get-change"
              with:
                id: "{{change_id}}"
            - name: conflicts
              type: call
              call: "servicenow.check-conflicts"
              with:
                date: "{{date}}"
            - name: submit
              type: call
              call: "servicenow.update"
              with:
                id: "{{change_id}}"
                state: "approval"
            - name: notify
              type: call
              call: "email.send"
              with:
                to: "cab@co.com"
                subject: "CAB: {{change_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: changes
          path: "/table/change_request/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-change
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Optimizes cloud costs at Gusto via Azure, FinOps, Jira, and Power BI.

naftiko: "0.5"
info:
  label: "Cloud Cost Optimization Pipeline"
  description: "Optimizes cloud costs at Gusto via Azure, FinOps, Jira, and Power BI."
  tags:
    - cloud
    - cost-management
    - finops
capability:
  exposes:
    - type: mcp
      namespace: cloud-opt
      port: 8080
      tools:
        - name: optimize
          description: "Optimize cloud costs at Gusto."
          inputParameters:
            - name: provider
              in: body
              type: string
              description: "Provider."
            - name: range
              in: body
              type: string
              description: "Range."
          steps:
            - name: spend
              type: call
              call: "cloud.get-costs"
              with:
                provider: "{{provider}}"
                range: "{{range}}"
            - name: savings
              type: call
              call: "finops.analyze"
              with:
                data: "{{spend.data}}"
            - name: action
              type: call
              call: "jira.create-issue"
              with:
                project: "FINOPS"
                summary: "Save ${{savings.potential}}"
            - name: report
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "cloud"
  consumes:
    - type: http
      namespace: cloud
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: costs
          path: "/providers/Microsoft.CostManagement/query"
          operations:
            - name: get-costs
              method: POST
    - type: http
      namespace: finops
      baseUri: "https://finops.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.finops_token"
      resources:
        - name: analysis
          path: "/savings"
          operations:
            - name: analyze
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Checks CloudWatch alarm at Gusto.

naftiko: "0.5"
info:
  label: "CloudWatch Alarm Check"
  description: "Checks CloudWatch alarm at Gusto."
  tags:
    - monitoring
    - aws
    - cloudwatch
capability:
  exposes:
    - type: mcp
      namespace: cw-alarm
      port: 8080
      tools:
        - name: check-alarm
          description: "Check alarm at Gusto."
          inputParameters:
            - name: alarm
              in: body
              type: string
              description: "Alarm name."
          call: "cw.describe-alarm"
          with:
            alarm: "{{alarm}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.MetricAlarms[0].StateValue"
  consumes:
    - type: http
      namespace: cw
      baseUri: "https://monitoring.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_token"
      resources:
        - name: alarms
          path: "/"
          operations:
            - name: describe-alarm
              method: GET

When a new payroll regulation is published, documents the change in Confluence, creates an implementation task in Jira, sends an advisory to affected customers via Gmail, and notifies the compliance team in Slack.

naftiko: "0.5"
info:
  label: "Compliance Regulatory Update Pipeline"
  description: "When a new payroll regulation is published, documents the change in Confluence, creates an implementation task in Jira, sends an advisory to affected customers via Gmail, and notifies the compliance team in Slack."
  tags:
    - compliance
    - regulatory
    - confluence
    - jira
    - gmail
    - slack
capability:
  exposes:
    - type: mcp
      namespace: regulatory-updates
      port: 8080
      tools:
        - name: process-regulatory-update
          description: "Given regulatory change details, document in Confluence, create Jira task, notify customers, and alert compliance."
          inputParameters:
            - name: regulation_title
              in: body
              type: string
              description: "Title of the regulatory change."
            - name: affected_states
              in: body
              type: string
              description: "Comma-separated list of affected states."
            - name: effective_date
              in: body
              type: string
              description: "Effective date of the change."
            - name: summary
              in: body
              type: string
              description: "Summary of the regulatory change."
          steps:
            - name: document-change
              type: call
              call: "confluence.create-page"
              with:
                space_key: "COMPLY"
                title: "Regulatory Update: {{regulation_title}}"
                body: "Title: {{regulation_title}}. States: {{affected_states}}. Effective: {{effective_date}}. Summary: {{summary}}."
            - name: create-implementation-task
              type: call
              call: "jira.create-issue"
              with:
                project: "COMPLY"
                summary: "Implement: {{regulation_title}}"
                description: "Regulatory change: {{regulation_title}}. Affected states: {{affected_states}}. Effective date: {{effective_date}}. Confluence: {{document-change.url}}."
                issue_type: "Task"
                due_date: "{{effective_date}}"
            - name: notify-customers
              type: call
              call: "gmail.send-email"
              with:
                to: "compliance-advisories@gusto.com"
                subject: "Payroll Compliance Update: {{regulation_title}}"
                body: "A new regulatory change affecting {{affected_states}} takes effect {{effective_date}}. {{summary}}. No action needed — Gusto will update your payroll automatically."
            - name: alert-compliance
              type: call
              call: "slack.post-message"
              with:
                channel: "compliance-team"
                text: "New regulation: {{regulation_title}}. States: {{affected_states}}. Effective: {{effective_date}}. Jira: {{create-implementation-task.key}}. Docs: {{document-change.url}}."
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://gusto.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.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: 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-email
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Searches Confluence at Gusto.

naftiko: "0.5"
info:
  label: "Confluence Article Search"
  description: "Searches Confluence at Gusto."
  tags:
    - knowledge-management
    - confluence
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: confluence-search
      port: 8080
      tools:
        - name: search-articles
          description: "Search Confluence at Gusto."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Query."
          call: "confluence.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.results[0].title"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://gusto.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search
              method: GET

Searches Gusto's Confluence knowledge base by keyword, returning matching pages for engineering docs, compliance guides, and product specs.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Search"
  description: "Searches Gusto's Confluence knowledge base by keyword, returning matching pages for engineering docs, compliance guides, and product specs."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-kb
          description: "Search Confluence by keyword."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Search keyword."
          call: "confluence.search"
          with:
            cql: "text~\"{{query}}\""
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://gusto.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search
              method: GET

Tracks contract renewals at Gusto via contracts system, email, Jira, and Salesforce.

naftiko: "0.5"
info:
  label: "Contract Renewal Pipeline"
  description: "Tracks contract renewals at Gusto via contracts system, email, Jira, and Salesforce."
  tags:
    - procurement
    - contracts
    - salesforce
    - jira
capability:
  exposes:
    - type: mcp
      namespace: contract-renew
      port: 8080
      tools:
        - name: track
          description: "Track renewals at Gusto."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "Contract ID."
            - name: owner
              in: body
              type: string
              description: "Owner email."
          steps:
            - name: get
              type: call
              call: "contracts.get"
              with:
                id: "{{contract_id}}"
            - name: remind
              type: call
              call: "email.send"
              with:
                to: "{{owner}}"
                subject: "Renewal: {{contract_id}}"
            - name: task
              type: call
              call: "jira.create-issue"
              with:
                project: "PROC"
                summary: "Renew {{contract_id}}"
            - name: crm
              type: call
              call: "salesforce.update"
              with:
                id: "{{contract_id}}"
                stage: "Renewal"
  consumes:
    - type: http
      namespace: contracts
      baseUri: "https://contracts.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.contracts_token"
      resources:
        - name: contracts
          path: "/contracts/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.com.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opps
          path: "/sobjects/Opportunity"
          operations:
            - name: update
              method: PATCH

Reallocates costs at Gusto.

naftiko: "0.5"
info:
  label: "Cost Reallocation Pipeline"
  description: "Reallocates costs at Gusto."
  tags:
    - finance
    - cost-allocation
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: cost-realloc
      port: 8080
      tools:
        - name: reallocate
          description: "Reallocate costs at Gusto."
          inputParameters:
            - name: source
              in: body
              type: string
              description: "Source CC."
            - name: target
              in: body
              type: string
              description: "Target CC."
            - name: amount
              in: body
              type: number
              description: "Amount."
          steps:
            - name: current
              type: call
              call: "oracle.get-alloc"
              with:
                cc: "{{source}}"
            - name: compute
              type: call
              call: "analytics.realloc"
              with:
                source: "{{source}}"
                target: "{{target}}"
                amount: "{{amount}}"
            - name: post
              type: call
              call: "oracle.post-journal"
              with:
                entries: "{{compute.entries}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance"
                text: "Reallocated ${{amount}} from {{source}} to {{target}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: allocations
          path: "/cost-centers/{{cc}}/allocations"
          inputParameters:
            - name: cc
              in: path
          operations:
            - name: get-alloc
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: realloc
          path: "/compute"
          operations:
            - name: realloc
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When Snowflake analytics flags a customer at churn risk, retrieves their account from Salesforce, creates a retention campaign in HubSpot, assigns a Gainsight health check, and alerts the customer success team in Slack.

naftiko: "0.5"
info:
  label: "Customer Churn Risk Alert Pipeline"
  description: "When Snowflake analytics flags a customer at churn risk, retrieves their account from Salesforce, creates a retention campaign in HubSpot, assigns a Gainsight health check, and alerts the customer success team in Slack."
  tags:
    - customer-success
    - churn
    - snowflake
    - salesforce
    - hubspot
    - gainsight
    - slack
capability:
  exposes:
    - type: mcp
      namespace: churn-prevention
      port: 8080
      tools:
        - name: process-churn-alert
          description: "Given a customer account ID and risk score, retrieve account, create retention campaign, assign health check, and alert CSM."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
            - name: risk_score
              in: body
              type: number
              description: "The churn risk score (0-100)."
            - name: risk_factors
              in: body
              type: string
              description: "Comma-separated risk factors identified."
          steps:
            - name: get-account
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{account_id}}"
            - name: create-retention-campaign
              type: call
              call: "hubspot.create-campaign"
              with:
                name: "Retention: {{get-account.Name}}"
                contact_email: "{{get-account.PrimaryEmail}}"
            - name: assign-health-check
              type: call
              call: "gainsight.create-cta"
              with:
                account_id: "{{account_id}}"
                reason: "Churn risk score: {{risk_score}}. Factors: {{risk_factors}}"
                type: "Risk"
            - name: alert-csm
              type: call
              call: "slack.post-message"
              with:
                channel: "customer-success"
                text: "CHURN RISK: {{get-account.Name}} (score: {{risk_score}}). Factors: {{risk_factors}}. Retention campaign: {{create-retention-campaign.id}}. Gainsight CTA created."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: campaigns
          path: "/marketing/v3/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: gainsight
      baseUri: "https://gusto.gainsightcloud.com/v1"
      authentication:
        type: bearer
        token: "$secrets.gainsight_token"
      resources:
        - name: ctas
          path: "/cta"
          operations:
            - name: create-cta
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a new SMB customer signs up, creates the account in Salesforce, sets up the Gainsight health score, sends the onboarding email series via HubSpot, creates a Zendesk welcome ticket, and notifies customer success in Slack.

naftiko: "0.5"
info:
  label: "Customer Onboarding Journey Orchestrator"
  description: "When a new SMB customer signs up, creates the account in Salesforce, sets up the Gainsight health score, sends the onboarding email series via HubSpot, creates a Zendesk welcome ticket, and notifies customer success in Slack."
  tags:
    - customer-success
    - onboarding
    - salesforce
    - gainsight
    - hubspot
    - zendesk
    - slack
capability:
  exposes:
    - type: mcp
      namespace: customer-onboarding
      port: 8080
      tools:
        - name: onboard-customer
          description: "Given company details, create SF account, Gainsight record, HubSpot enrollment, Zendesk ticket, and notify CS."
          inputParameters:
            - name: company_name
              in: body
              type: string
              description: "The SMB company name."
            - name: admin_email
              in: body
              type: string
              description: "The company admin email."
            - name: employee_count
              in: body
              type: number
              description: "Number of employees."
            - name: plan_tier
              in: body
              type: string
              description: "The Gusto plan tier."
          steps:
            - name: create-account
              type: call
              call: "salesforce.create-account"
              with:
                name: "{{company_name}}"
                admin_email: "{{admin_email}}"
                employee_count: "{{employee_count}}"
                plan: "{{plan_tier}}"
            - name: setup-health-score
              type: call
              call: "gainsight.create-company"
              with:
                account_id: "{{create-account.id}}"
                name: "{{company_name}}"
                plan: "{{plan_tier}}"
            - name: enroll-email-series
              type: call
              call: "hubspot.enroll-workflow"
              with:
                email: "{{admin_email}}"
                workflow_id: "onboarding-series"
            - name: create-welcome-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "Welcome to Gusto — {{company_name}}"
                description: "New customer: {{company_name}}. Admin: {{admin_email}}. Employees: {{employee_count}}. Plan: {{plan_tier}}."
                type: "task"
            - name: notify-cs
              type: call
              call: "slack.post-message"
              with:
                channel: "customer-success"
                text: "New customer: {{company_name}} ({{employee_count}} employees, {{plan_tier}}). SF: {{create-account.id}}. Onboarding email enrolled. Zendesk: {{create-welcome-ticket.id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: gainsight
      baseUri: "https://gusto.gainsightcloud.com/v1"
      authentication:
        type: bearer
        token: "$secrets.gainsight_token"
      resources:
        - name: companies
          path: "/companies"
          operations:
            - name: create-company
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: workflows
          path: "/automation/v4/flows/{{workflow_id}}/enrollments"
          inputParameters:
            - name: workflow_id
              in: path
          operations:
            - name: enroll-workflow
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://gusto.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets"
          operations:
            - name: create-ticket
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a Zendesk ticket is escalated, retrieves customer and ticket details, creates a Salesforce case for the account team, logs the escalation in Jira, and alerts the support lead in Slack.

naftiko: "0.5"
info:
  label: "Customer Support Escalation Pipeline"
  description: "When a Zendesk ticket is escalated, retrieves customer and ticket details, creates a Salesforce case for the account team, logs the escalation in Jira, and alerts the support lead in Slack."
  tags:
    - customer-service
    - escalation
    - zendesk
    - salesforce
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: support-escalation
      port: 8080
      tools:
        - name: escalate-ticket
          description: "Given a Zendesk ticket ID, pull details, create Salesforce case, Jira issue, and notify via Slack."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          steps:
            - name: get-ticket
              type: call
              call: "zendesk.get-ticket"
              with:
                ticket_id: "{{ticket_id}}"
            - name: create-sf-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Escalated: {{get-ticket.subject}}"
                description: "Zendesk ticket #{{ticket_id}}. Customer: {{get-ticket.requester_name}}. Priority: {{get-ticket.priority}}. Description: {{get-ticket.description}}"
                priority: "High"
            - name: create-jira-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "SUPPORT"
                summary: "Escalation: Zendesk #{{ticket_id}} — {{get-ticket.subject}}"
                description: "Zendesk: #{{ticket_id}}. Salesforce case: {{create-sf-case.CaseNumber}}. Customer: {{get-ticket.requester_name}}."
                issue_type: "Bug"
            - name: alert-lead
              type: call
              call: "slack.post-message"
              with:
                channel: "support-escalations"
                text: "ESCALATION: Zendesk #{{ticket_id}} — {{get-ticket.subject}}. Customer: {{get-ticket.requester_name}}. SF Case: {{create-sf-case.CaseNumber}}. Jira: {{create-jira-issue.key}}."
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://gusto.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Monitors data pipelines at Gusto via Databricks, Snowflake, Slack, and ServiceNow.

naftiko: "0.5"
info:
  label: "Data Pipeline Monitor Pipeline"
  description: "Monitors data pipelines at Gusto via Databricks, Snowflake, Slack, and ServiceNow."
  tags:
    - data-engineering
    - databricks
    - monitoring
    - slack
capability:
  exposes:
    - type: mcp
      namespace: pipeline-mon
      port: 8080
      tools:
        - name: monitor
          description: "Monitor pipelines at Gusto."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "Pipeline ID."
          steps:
            - name: status
              type: call
              call: "databricks.get-run"
              with:
                id: "{{pipeline_id}}"
            - name: quality
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#data"
                text: "Pipeline {{pipeline_id}}: {{status.state}}"
            - name: incident
              type: call
              call: "servicenow.create-incident"
              with:
                desc: "Pipeline {{pipeline_id}} issue"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://gusto.com.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/runs/get"
          operations:
            - name: get-run
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Manages data retention at Gusto.

naftiko: "0.5"
info:
  label: "Data Retention Pipeline"
  description: "Manages data retention at Gusto."
  tags:
    - data-governance
    - compliance
    - retention
capability:
  exposes:
    - type: mcp
      namespace: retention
      port: 8080
      tools:
        - name: cleanup
          description: "Manage retention at Gusto."
          inputParameters:
            - name: policy
              in: body
              type: string
              description: "Policy ID."
          steps:
            - name: find
              type: call
              call: "catalog.find-expired"
              with:
                policy: "{{policy}}"
            - name: archive
              type: call
              call: "storage.archive"
              with:
                records: "{{find.ids}}"
            - name: delete
              type: call
              call: "db.delete"
              with:
                ids: "{{find.ids}}"
            - name: log
              type: call
              call: "snowflake.query"
              with:
                query: "INSERT INTO retention_log VALUES ('{{policy}}',{{find.count}})"
  consumes:
    - type: http
      namespace: catalog
      baseUri: "https://catalog.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.catalog_token"
      resources:
        - name: policies
          path: "/expired"
          operations:
            - name: find-expired
              method: GET
    - type: http
      namespace: storage
      baseUri: "https://storage.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.storage_token"
      resources:
        - name: archives
          path: "/archive"
          operations:
            - name: archive
              method: POST
    - type: http
      namespace: db
      baseUri: "https://db.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.db_token"
      resources:
        - name: records
          path: "/delete"
          operations:
            - name: delete
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST

Queries Datadog for application performance metrics including latency, error rate, and throughput for Gusto's core services.

naftiko: "0.5"
info:
  label: "Datadog Application Performance"
  description: "Queries Datadog for application performance metrics including latency, error rate, and throughput for Gusto's core services."
  tags:
    - infrastructure
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: apm
      port: 8080
      tools:
        - name: get-service-health
          description: "Retrieve service health from Datadog by service name."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name."
          call: "datadog.get-service-summary"
          with:
            service: "{{service_name}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: services
          path: "/service_dependencies"
          operations:
            - name: get-service-summary
              method: GET

Checks Datadog monitor at Gusto.

naftiko: "0.5"
info:
  label: "Datadog Monitor Check"
  description: "Checks Datadog monitor at Gusto."
  tags:
    - monitoring
    - datadog
    - observability
capability:
  exposes:
    - type: mcp
      namespace: dd-monitor
      port: 8080
      tools:
        - name: check-monitor
          description: "Check monitor at Gusto."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "Monitor ID."
          call: "datadog.get-monitor"
          with:
            monitor_id: "{{monitor_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.overall_state"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET

Checks container at Gusto.

naftiko: "0.5"
info:
  label: "Docker Container Check"
  description: "Checks container at Gusto."
  tags:
    - containers
    - docker
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: docker
      port: 8080
      tools:
        - name: check-container
          description: "Check container at Gusto."
          inputParameters:
            - name: id
              in: body
              type: string
              description: "Container ID."
          call: "docker.get-container"
          with:
            id: "{{id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.State.Status"
  consumes:
    - type: http
      namespace: docker
      baseUri: "https://docker.gusto.com/v1.41"
      authentication:
        type: bearer
        token: "$secrets.docker_token"
      resources:
        - name: containers
          path: "/containers/{{id}}/json"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-container
              method: GET

Tests disaster recovery at Gusto via failover, health checks, and reporting.

naftiko: "0.5"
info:
  label: "DR Test Pipeline"
  description: "Tests disaster recovery at Gusto via failover, health checks, and reporting."
  tags:
    - disaster-recovery
    - business-continuity
    - testing
capability:
  exposes:
    - type: mcp
      namespace: dr-test
      port: 8080
      tools:
        - name: test-dr
          description: "Test DR at Gusto."
          inputParameters:
            - name: plan_id
              in: body
              type: string
              description: "Plan ID."
            - name: type
              in: body
              type: string
              description: "Test type."
          steps:
            - name: failover
              type: call
              call: "dr.failover"
              with:
                plan: "{{plan_id}}"
                type: "{{type}}"
            - name: validate
              type: call
              call: "monitoring.check"
              with:
                scope: "critical"
            - name: measure
              type: call
              call: "dr.metrics"
              with:
                id: "{{failover.id}}"
            - name: report
              type: call
              call: "confluence.create-page"
              with:
                title: "DR - {{plan_id}}"
                body: "RTO:{{measure.rto}}m RPO:{{measure.rpo}}m"
  consumes:
    - type: http
      namespace: dr
      baseUri: "https://dr.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dr_token"
      resources:
        - name: failovers
          path: "/failovers"
          operations:
            - name: failover
              method: POST
    - type: http
      namespace: monitoring
      baseUri: "https://monitoring.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: health
          path: "/checks"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://gusto.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Detects infrastructure drift at Gusto via Terraform, Slack, and Jira.

naftiko: "0.5"
info:
  label: "Drift Detection Pipeline"
  description: "Detects infrastructure drift at Gusto via Terraform, Slack, and Jira."
  tags:
    - infrastructure
    - terraform
    - drift-detection
    - devops
capability:
  exposes:
    - type: mcp
      namespace: drift-det
      port: 8080
      tools:
        - name: detect
          description: "Detect drift at Gusto."
          inputParameters:
            - name: ws_id
              in: body
              type: string
              description: "Workspace ID."
            - name: env
              in: body
              type: string
              description: "Environment."
          steps:
            - name: plan
              type: call
              call: "terraform.run"
              with:
                ws: "{{ws_id}}"
            - name: check
              type: call
              call: "terraform.get-plan"
              with:
                run: "{{plan.id}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#infra"
                text: "Drift {{env}}: {{check.changes}} changes"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "INFRA"
                summary: "Drift in {{env}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: run
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Checks Dynatrace host at Gusto.

naftiko: "0.5"
info:
  label: "Dynatrace Host Status"
  description: "Checks Dynatrace host at Gusto."
  tags:
    - monitoring
    - dynatrace
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: dt
      port: 8080
      tools:
        - name: check-host
          description: "Check host at Gusto."
          inputParameters:
            - name: host_id
              in: body
              type: string
              description: "Host ID."
          call: "dt.get-host"
          with:
            id: "{{host_id}}"
          outputParameters:
            - name: availability
              type: string
              mapping: "$.availabilityState"
  consumes:
    - type: http
      namespace: dt
      baseUri: "https://gusto.com.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: entities
          path: "/entities/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-host
              method: GET

Checks ES index at Gusto.

naftiko: "0.5"
info:
  label: "ES Index Health"
  description: "Checks ES index at Gusto."
  tags:
    - search
    - elasticsearch
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: es-health
      port: 8080
      tools:
        - name: check-index
          description: "Check ES index at Gusto."
          inputParameters:
            - name: index
              in: body
              type: string
              description: "Index name."
          call: "es.get-health"
          with:
            index: "{{index}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: docs
              type: number
              mapping: "$.docs.count"
  consumes:
    - type: http
      namespace: es
      baseUri: "https://es.gusto.com:9200"
      authentication:
        type: bearer
        token: "$secrets.es_token"
      resources:
        - name: indices
          path: "/{{index}}/_stats"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: get-health
              method: GET

Offboards employees at Gusto via Okta, Slack, ServiceNow, and storage.

naftiko: "0.5"
info:
  label: "Employee Offboarding Pipeline"
  description: "Offboards employees at Gusto via Okta, Slack, ServiceNow, and storage."
  tags:
    - hr
    - offboarding
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: offboarding
      port: 8080
      tools:
        - name: offboard
          description: "Offboard employees at Gusto."
          inputParameters:
            - name: emp_id
              in: body
              type: string
              description: "Employee ID."
            - name: last_day
              in: body
              type: string
              description: "Last day."
          steps:
            - name: disable
              type: call
              call: "okta.deactivate"
              with:
                user: "{{emp_id}}"
            - name: revoke
              type: call
              call: "slack.remove"
              with:
                user: "{{emp_id}}"
            - name: return
              type: call
              call: "servicenow.create-request"
              with:
                type: "return"
                emp: "{{emp_id}}"
            - name: archive
              type: call
              call: "storage.archive"
              with:
                user: "{{emp_id}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://gusto.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users/{{user}}/lifecycle/deactivate"
          inputParameters:
            - name: user
              in: path
          operations:
            - name: deactivate
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: users
          path: "/users.admin.remove"
          operations:
            - name: remove
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: storage
      baseUri: "https://storage.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.storage_token"
      resources:
        - name: archives
          path: "/archive"
          operations:
            - name: archive
              method: POST

Retrieves an employee's payroll record from Oracle Financials by employee ID, returning salary, pay frequency, tax withholdings, and last pay date.

naftiko: "0.5"
info:
  label: "Employee Payroll Record Lookup"
  description: "Retrieves an employee's payroll record from Oracle Financials by employee ID, returning salary, pay frequency, tax withholdings, and last pay date."
  tags:
    - payroll
    - oracle-financials
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: get-payroll-record
          description: "Look up an employee's payroll details. Returns salary, pay frequency, withholdings, and last pay date."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The employee identifier."
          call: "oracle-financials.get-payroll"
          with:
            employee_id: "{{employee_id}}"
  consumes:
    - type: http
      namespace: oracle-financials
      baseUri: "https://gusto.oraclecloud.com/hcmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_financials_token"
      resources:
        - name: payroll
          path: "/payrollRelationships?q=PersonNumber={{employee_id}}"
          inputParameters:
            - name: employee_id
              in: query
          operations:
            - name: get-payroll
              method: GET

Generates ESG reports at Gusto.

naftiko: "0.5"
info:
  label: "ESG Report Pipeline"
  description: "Generates ESG reports at Gusto."
  tags:
    - sustainability
    - esg
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: esg
      port: 8080
      tools:
        - name: gen-report
          description: "Generate ESG report at Gusto."
          inputParameters:
            - name: year
              in: body
              type: string
              description: "Year."
          steps:
            - name: data
              type: call
              call: "platform.get-environmental"
              with:
                year: "{{year}}"
            - name: compute
              type: call
              call: "analytics.compute-esg"
              with:
                data: "{{data.metrics}}"
            - name: generate
              type: call
              call: "docs.create-report"
              with:
                template: "esg"
            - name: publish
              type: call
              call: "sharepoint.upload"
              with:
                path: "/ESG/{{year}}/report.pdf"
  consumes:
    - type: http
      namespace: platform
      baseUri: "https://data.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.data_token"
      resources:
        - name: environmental
          path: "/metrics"
          operations:
            - name: get-environmental
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: esg
          path: "/compute"
          operations:
            - name: compute-esg
              method: POST
    - type: http
      namespace: docs
      baseUri: "https://docs.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.docs_token"
      resources:
        - name: reports
          path: "/create"
          operations:
            - name: create-report
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: files
          path: "/sites/root/drive/root:/{{path}}:/content"
          operations:
            - name: upload
              method: PUT

Audits expenses at Gusto via Concur, compliance checks, and email.

naftiko: "0.5"
info:
  label: "Expense Audit Pipeline"
  description: "Audits expenses at Gusto via Concur, compliance checks, and email."
  tags:
    - finance
    - travel
    - sap-concur
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: expense-audit
      port: 8080
      tools:
        - name: audit
          description: "Audit expenses at Gusto."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "Report ID."
          steps:
            - name: get
              type: call
              call: "concur.get-report"
              with:
                id: "{{report_id}}"
            - name: check
              type: call
              call: "compliance.check"
              with:
                expenses: "{{get.entries}}"
            - name: flag
              type: call
              call: "workflow.flag"
              with:
                id: "{{report_id}}"
                violations: "{{check.violations}}"
            - name: notify
              type: call
              call: "email.send"
              with:
                to: "{{get.approver}}"
                subject: "Expense {{report_id}} violations"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-report
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: policies
          path: "/check"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: workflow
      baseUri: "https://workflow.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workflow_token"
      resources:
        - name: reviews
          path: "/flag"
          operations:
            - name: flag
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Fetches Facebook Ads campaign performance including reach, impressions, link clicks, and conversions for Gusto's SMB acquisition campaigns.

naftiko: "0.5"
info:
  label: "Facebook Ads Campaign Metrics"
  description: "Fetches Facebook Ads campaign performance including reach, impressions, link clicks, and conversions for Gusto's SMB acquisition campaigns."
  tags:
    - marketing
    - advertising
    - facebook-ads
capability:
  exposes:
    - type: mcp
      namespace: social-ads
      port: 8080
      tools:
        - name: get-fb-campaign
          description: "Retrieve Facebook Ads campaign insights by campaign ID."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Facebook Ads campaign ID."
          call: "facebook-ads.get-insights"
          with:
            campaign_id: "{{campaign_id}}"
  consumes:
    - type: http
      namespace: facebook-ads
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_ads_token"
      resources:
        - name: insights
          path: "/{{campaign_id}}/insights"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-insights
              method: GET

Analyzes feedback at Gusto via surveys, AI sentiment, and Power BI.

naftiko: "0.5"
info:
  label: "Customer Feedback Pipeline"
  description: "Analyzes feedback at Gusto via surveys, AI sentiment, and Power BI."
  tags:
    - customer-experience
    - analytics
    - sentiment-analysis
capability:
  exposes:
    - type: mcp
      namespace: feedback
      port: 8080
      tools:
        - name: analyze
          description: "Analyze feedback at Gusto."
          inputParameters:
            - name: survey_id
              in: body
              type: string
              description: "Survey ID."
          steps:
            - name: collect
              type: call
              call: "survey.get"
              with:
                id: "{{survey_id}}"
            - name: sentiment
              type: call
              call: "ai.analyze"
              with:
                text: "{{collect.responses}}"
            - name: themes
              type: call
              call: "ai.themes"
              with:
                data: "{{collect.responses}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "cx"
  consumes:
    - type: http
      namespace: survey
      baseUri: "https://surveys.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.survey_token"
      resources:
        - name: responses
          path: "/surveys/{{id}}/responses"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: ai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: analyze
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Retrieves a Figma design file's metadata including last modified date, number of pages, and collaborator count for design team tracking.

naftiko: "0.5"
info:
  label: "Figma Design File Status"
  description: "Retrieves a Figma design file's metadata including last modified date, number of pages, and collaborator count for design team tracking."
  tags:
    - design
    - figma
capability:
  exposes:
    - type: mcp
      namespace: design
      port: 8080
      tools:
        - name: get-design-file
          description: "Look up a Figma file by key. Returns name, last modified, and page count."
          inputParameters:
            - name: file_key
              in: body
              type: string
              description: "The Figma file key."
          call: "figma.get-file"
          with:
            file_key: "{{file_key}}"
  consumes:
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: files
          path: "/files/{{file_key}}"
          inputParameters:
            - name: file_key
              in: path
          operations:
            - name: get-file
              method: GET

Checks GitHub repo at Gusto.

naftiko: "0.5"
info:
  label: "GitHub Repo Check"
  description: "Checks GitHub repo at Gusto."
  tags:
    - devops
    - github
    - version-control
capability:
  exposes:
    - type: mcp
      namespace: gh-repo
      port: 8080
      tools:
        - name: get-branch
          description: "Check branch at Gusto."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "Repo."
            - name: branch
              in: body
              type: string
              description: "Branch."
          call: "github.get-branch"
          with:
            repo: "{{repo}}"
            branch: "{{branch}}"
          outputParameters:
            - name: sha
              type: string
              mapping: "$.commit.sha"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: branches
          path: "/repos/org/{{repo}}/branches/{{branch}}"
          inputParameters:
            - name: repo
              in: path
            - name: branch
              in: path
          operations:
            - name: get-branch
              method: GET

Retrieves GitHub repository details including last commit, open PRs, branch protection status, and CI health for Gusto engineering.

naftiko: "0.5"
info:
  label: "GitHub Repository Status"
  description: "Retrieves GitHub repository details including last commit, open PRs, branch protection status, and CI health for Gusto engineering."
  tags:
    - engineering
    - github
capability:
  exposes:
    - type: mcp
      namespace: source-control
      port: 8080
      tools:
        - name: get-repo-status
          description: "Look up a GitHub repository. Returns last commit, open PR count, and default branch."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repository name (owner/repo)."
          call: "github.get-repo"
          with:
            repo: "{{repo_name}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{repo}}"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-repo
              method: GET

Retrieves Google Ads campaign metrics including impressions, clicks, conversions, and cost-per-acquisition for Gusto's growth marketing.

naftiko: "0.5"
info:
  label: "Google Ads Campaign Performance"
  description: "Retrieves Google Ads campaign metrics including impressions, clicks, conversions, and cost-per-acquisition for Gusto's growth marketing."
  tags:
    - marketing
    - advertising
    - google-ads
capability:
  exposes:
    - type: mcp
      namespace: paid-marketing
      port: 8080
      tools:
        - name: get-ads-performance
          description: "Retrieve Google Ads campaign performance for a date range."
          inputParameters:
            - 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: "google-ads.get-report"
          with:
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
  consumes:
    - type: http
      namespace: google-ads
      baseUri: "https://googleads.googleapis.com/v14"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: reports
          path: "/customers/{{customer_id}}/googleAds:searchStream"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-report
              method: POST

Pulls daily web traffic metrics from Google Analytics for gusto.com including sessions, signup conversion rate, and top landing pages.

naftiko: "0.5"
info:
  label: "Google Analytics Web Traffic"
  description: "Pulls daily web traffic metrics from Google Analytics for gusto.com including sessions, signup conversion rate, and top landing pages."
  tags:
    - marketing
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-web-traffic
          description: "Retrieve daily web traffic from Google Analytics for a date range."
          inputParameters:
            - 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: "google-analytics.run-report"
          with:
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST

Checks Google user at Gusto.

naftiko: "0.5"
info:
  label: "Google Workspace User Check"
  description: "Checks Google user at Gusto."
  tags:
    - identity
    - google-workspace
    - directory
capability:
  exposes:
    - type: mcp
      namespace: gws
      port: 8080
      tools:
        - name: check-user
          description: "Check user at Gusto."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Email."
          call: "google.get-user"
          with:
            email: "{{email}}"
          outputParameters:
            - name: suspended
              type: boolean
              mapping: "$.suspended"
  consumes:
    - type: http
      namespace: google
      baseUri: "https://admin.googleapis.com/admin/directory/v1"
      authentication:
        type: bearer
        token: "$secrets.google_admin_token"
      resources:
        - name: users
          path: "/users/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-user
              method: GET

Checks Grafana dashboard at Gusto.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Status"
  description: "Checks Grafana dashboard at Gusto."
  tags:
    - monitoring
    - grafana
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: grafana
      port: 8080
      tools:
        - name: check-dash
          description: "Check dashboard at Gusto."
          inputParameters:
            - name: uid
              in: body
              type: string
              description: "Dashboard UID."
          call: "grafana.get-dash"
          with:
            uid: "{{uid}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.dashboard.title"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://grafana.gusto.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: dashboards
          path: "/dashboards/uid/{{uid}}"
          inputParameters:
            - name: uid
              in: path
          operations:
            - name: get-dash
              method: GET

Auto-routes tickets at Gusto.

naftiko: "0.5"
info:
  label: "Helpdesk Auto-Routing Pipeline"
  description: "Auto-routes tickets at Gusto."
  tags:
    - support
    - helpdesk
    - ai
    - automation
capability:
  exposes:
    - type: mcp
      namespace: ticket-route
      port: 8080
      tools:
        - name: route-ticket
          description: "Auto-route tickets at Gusto."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "Ticket ID."
          steps:
            - name: get
              type: call
              call: "helpdesk.get-ticket"
              with:
                id: "{{ticket_id}}"
            - name: classify
              type: call
              call: "ai.classify"
              with:
                subject: "{{get.subject}}"
                body: "{{get.body}}"
            - name: assign
              type: call
              call: "helpdesk.assign"
              with:
                id: "{{ticket_id}}"
                team: "{{classify.team}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#{{classify.team}}"
                text: "New: {{get.subject}} ({{classify.priority}})"
  consumes:
    - type: http
      namespace: helpdesk
      baseUri: "https://helpdesk.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.helpdesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: ai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: classify
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a new hire is confirmed, creates the employee record in Salesforce, sends the offer letter via Gmail, logs the hire in the Snowflake analytics table, and notifies the hiring manager in Slack.

naftiko: "0.5"
info:
  label: "Hiring Pipeline Orchestrator"
  description: "When a new hire is confirmed, creates the employee record in Salesforce, sends the offer letter via Gmail, logs the hire in the Snowflake analytics table, and notifies the hiring manager in Slack."
  tags:
    - hiring
    - salesforce
    - gmail
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hiring
      port: 8080
      tools:
        - name: process-new-hire
          description: "Given new hire details, create SF record, send offer, log analytics, and notify manager."
          inputParameters:
            - name: candidate_name
              in: body
              type: string
              description: "The candidate's full name."
            - name: candidate_email
              in: body
              type: string
              description: "The candidate's email."
            - name: position
              in: body
              type: string
              description: "The job title."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: hiring_manager_slack
              in: body
              type: string
              description: "The hiring manager's Slack user ID."
          steps:
            - name: create-employee-record
              type: call
              call: "salesforce.create-contact"
              with:
                name: "{{candidate_name}}"
                email: "{{candidate_email}}"
                title: "{{position}}"
                start_date: "{{start_date}}"
            - name: send-offer
              type: call
              call: "gmail.send-email"
              with:
                to: "{{candidate_email}}"
                subject: "Welcome to the Team — Your Offer from Gusto"
                body: "Dear {{candidate_name}}, we're thrilled to offer you the position of {{position}} starting {{start_date}}. Please review and sign your offer letter."
            - name: log-analytics
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO hiring_analytics (name, email, position, start_date, created_at) VALUES ('{{candidate_name}}', '{{candidate_email}}', '{{position}}', '{{start_date}}', CURRENT_TIMESTAMP)"
                warehouse: "HR_WH"
            - name: notify-manager
              type: call
              call: "slack.post-message"
              with:
                channel: "{{hiring_manager_slack}}"
                text: "New hire confirmed: {{candidate_name}} as {{position}}, starting {{start_date}}. Offer sent. SF record: {{create-employee-record.id}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact"
          operations:
            - name: create-contact
              method: POST
    - 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-email
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves a lead record from HubSpot by email, returning lifecycle stage, lead score, company size, and last activity date for the sales team.

naftiko: "0.5"
info:
  label: "HubSpot Lead Status"
  description: "Retrieves a lead record from HubSpot by email, returning lifecycle stage, lead score, company size, and last activity date for the sales team."
  tags:
    - sales
    - lead-management
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: get-lead
          description: "Look up a lead in HubSpot by email. Returns lifecycle stage, score, and company details."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The lead email address."
          call: "hubspot.get-contact"
          with:
            email: "{{email}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/crm/v3/objects/contacts/search"
          operations:
            - name: get-contact
              method: POST

Escalates IT incidents at Gusto via ServiceNow, PagerDuty, and Slack.

naftiko: "0.5"
info:
  label: "IT Incident Escalation Pipeline"
  description: "Escalates IT incidents at Gusto via ServiceNow, PagerDuty, and Slack."
  tags:
    - incident-management
    - servicenow
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-incident
          description: "Escalate incidents at Gusto."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Incident ID."
            - name: severity
              in: body
              type: string
              description: "Severity."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                incident_id: "{{incident_id}}"
            - name: page
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "{{get-incident.description}}"
                urgency: "{{severity}}"
            - name: channel
              type: call
              call: "slack.create-channel"
              with:
                name: "inc-{{incident_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#inc-{{incident_id}}"
                text: "P{{severity}}: {{get-incident.description}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident/{{incident_id}}"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: get-incident
              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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: channels
          path: "/conversations.create"
          operations:
            - name: create-channel
              method: POST

Retrieves sprint progress at Gusto.

naftiko: "0.5"
info:
  label: "Jira Sprint Progress Lookup"
  description: "Retrieves sprint progress at Gusto."
  tags:
    - project-management
    - jira
    - agile
capability:
  exposes:
    - type: mcp
      namespace: jira-sprint
      port: 8080
      tools:
        - name: get-sprint
          description: "Look up sprint at Gusto."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "Project key."
          call: "jira.get-sprints"
          with:
            project: "{{project_key}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.values[0].name"
            - name: state
              type: string
              mapping: "$.values[0].state"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://gusto.com.atlassian.net/rest/agile/1.0"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: sprints
          path: "/board/1/sprint"
          operations:
            - name: get-sprints
              method: GET

Retrieves a Jira task by issue key, returning summary, status, assignee, and priority for engineering sprint tracking.

naftiko: "0.5"
info:
  label: "Jira Task Status"
  description: "Retrieves a Jira task by issue key, returning summary, status, assignee, and priority for engineering sprint tracking."
  tags:
    - engineering
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: eng-tasks
      port: 8080
      tools:
        - name: get-task
          description: "Look up a Jira issue by key."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://gusto.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Maintains KB at Gusto by finding stale articles and notifying owners.

naftiko: "0.5"
info:
  label: "Knowledge Base Maintenance Pipeline"
  description: "Maintains KB at Gusto by finding stale articles and notifying owners."
  tags:
    - knowledge-management
    - confluence
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: kb-maint
      port: 8080
      tools:
        - name: maintain-kb
          description: "Maintain KB at Gusto."
          inputParameters:
            - name: space
              in: body
              type: string
              description: "Confluence space."
            - name: stale_days
              in: body
              type: number
              description: "Days threshold."
          steps:
            - name: find
              type: call
              call: "confluence.search-stale"
              with:
                space: "{{space}}"
                days: "{{stale_days}}"
            - name: notify
              type: call
              call: "email.batch"
              with:
                to: "{{find.owners}}"
                subject: "KB review needed"
            - name: flag
              type: call
              call: "confluence.add-label"
              with:
                pages: "{{find.ids}}"
                label: "needs-review"
            - name: report
              type: call
              call: "slack.post-message"
              with:
                channel: "#kb"
                text: "KB: {{find.count}} stale articles"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://gusto.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search-stale
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Generates KPI digest at Gusto from Snowflake, Oracle, Power BI, and email.

naftiko: "0.5"
info:
  label: "Weekly KPI Digest Pipeline"
  description: "Generates KPI digest at Gusto from Snowflake, Oracle, Power BI, and email."
  tags:
    - reporting
    - kpi
    - snowflake
    - executive
capability:
  exposes:
    - type: mcp
      namespace: kpi-digest
      port: 8080
      tools:
        - name: gen-digest
          description: "Generate KPI digest at Gusto."
          inputParameters:
            - name: week
              in: body
              type: string
              description: "Week ending."
            - name: dist
              in: body
              type: string
              description: "Distribution list."
          steps:
            - name: ops
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT * FROM kpis WHERE w='{{week}}'"
            - name: fin
              type: call
              call: "oracle.get-summary"
              with:
                period: "{{week}}"
            - name: refresh
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "exec_kpis"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "{{dist}}"
                subject: "KPIs - {{week}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://oracle.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: fin
          path: "/summary"
          operations:
            - name: get-summary
              method: GET
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks K8s pod health at Gusto.

naftiko: "0.5"
info:
  label: "K8s Pod Health"
  description: "Checks K8s pod health at Gusto."
  tags:
    - containers
    - kubernetes
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: k8s-pod
      port: 8080
      tools:
        - name: check-pod
          description: "Check pod at Gusto."
          inputParameters:
            - name: namespace
              in: body
              type: string
              description: "Namespace."
            - name: pod
              in: body
              type: string
              description: "Pod name."
          call: "k8s.get-pod"
          with:
            namespace: "{{namespace}}"
            pod: "{{pod}}"
          outputParameters:
            - name: phase
              type: string
              mapping: "$.status.phase"
  consumes:
    - type: http
      namespace: k8s
      baseUri: "https://k8s.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.k8s_token"
      resources:
        - name: pods
          path: "/namespaces/{{namespace}}/pods/{{pod}}"
          inputParameters:
            - name: namespace
              in: path
            - name: pod
              in: path
          operations:
            - name: get-pod
              method: GET

Checks Lambda at Gusto.

naftiko: "0.5"
info:
  label: "Lambda Function Check"
  description: "Checks Lambda at Gusto."
  tags:
    - serverless
    - aws
    - lambda
capability:
  exposes:
    - type: mcp
      namespace: lambda
      port: 8080
      tools:
        - name: check-fn
          description: "Check Lambda at Gusto."
          inputParameters:
            - name: fn
              in: body
              type: string
              description: "Function name."
          call: "lambda.get-fn"
          with:
            name: "{{fn}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.Configuration.State"
  consumes:
    - type: http
      namespace: lambda
      baseUri: "https://lambda.us-east-1.amazonaws.com/2015-03-31"
      authentication:
        type: bearer
        token: "$secrets.aws_token"
      resources:
        - name: functions
          path: "/functions/{{name}}"
          inputParameters:
            - name: name
              in: path
          operations:
            - name: get-fn
              method: GET

Checks license compliance at Gusto via scanning, entitlements, and procurement.

naftiko: "0.5"
info:
  label: "License Compliance Pipeline"
  description: "Checks license compliance at Gusto via scanning, entitlements, and procurement."
  tags:
    - compliance
    - licensing
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: license-comp
      port: 8080
      tools:
        - name: check-licenses
          description: "Check license compliance at Gusto."
          inputParameters:
            - name: software
              in: body
              type: string
              description: "Software."
            - name: vendor
              in: body
              type: string
              description: "Vendor."
          steps:
            - name: scan
              type: call
              call: "assets.installations"
              with:
                sw: "{{software}}"
            - name: entitlements
              type: call
              call: "licenses.get"
              with:
                sw: "{{software}}"
            - name: flag
              type: call
              call: "compliance.flag"
              with:
                installed: "{{scan.count}}"
                entitled: "{{entitlements.count}}"
            - name: procure
              type: call
              call: "servicenow.create-request"
              with:
                type: "license"
                sw: "{{software}}"
  consumes:
    - type: http
      namespace: assets
      baseUri: "https://assets.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.asset_token"
      resources:
        - name: installations
          path: "/installations"
          operations:
            - name: installations
              method: GET
    - type: http
      namespace: licenses
      baseUri: "https://licenses.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.license_token"
      resources:
        - name: ent
          path: "/entitlements"
          operations:
            - name: get
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: overages
          path: "/flag"
          operations:
            - name: flag
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Tracks marketing campaigns at Gusto.

naftiko: "0.5"
info:
  label: "Marketing Campaign Pipeline"
  description: "Tracks marketing campaigns at Gusto."
  tags:
    - marketing
    - google-ads
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: track-campaign
          description: "Track campaigns at Gusto."
          inputParameters:
            - name: campaign
              in: body
              type: string
              description: "Campaign ID."
          steps:
            - name: ads
              type: call
              call: "google-ads.get"
              with:
                id: "{{campaign}}"
            - name: social
              type: call
              call: "social.get-metrics"
              with:
                campaign: "{{campaign}}"
            - name: compile
              type: call
              call: "analytics.compile"
              with:
                ads: "{{ads.data}}"
                social: "{{social.data}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "marketing"
  consumes:
    - type: http
      namespace: google-ads
      baseUri: "https://googleads.googleapis.com/v14"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: campaigns
          path: "/campaigns/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: social
      baseUri: "https://social.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.social_token"
      resources:
        - name: metrics
          path: "/campaigns/{{campaign}}"
          inputParameters:
            - name: campaign
              in: path
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: marketing
          path: "/compile"
          operations:
            - name: compile
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Checks MongoDB at Gusto.

naftiko: "0.5"
info:
  label: "MongoDB Stats Check"
  description: "Checks MongoDB at Gusto."
  tags:
    - database
    - mongodb
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mongo
      port: 8080
      tools:
        - name: get-stats
          description: "Check MongoDB at Gusto."
          inputParameters:
            - name: db
              in: body
              type: string
              description: "Database."
            - name: collection
              in: body
              type: string
              description: "Collection."
          call: "mongo.get-stats"
          with:
            db: "{{db}}"
            collection: "{{collection}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.count"
  consumes:
    - type: http
      namespace: mongo
      baseUri: "https://mongo.gusto.com/api/atlas/v1.0"
      authentication:
        type: bearer
        token: "$secrets.mongo_token"
      resources:
        - name: collections
          path: "/collStats"
          operations:
            - name: get-stats
              method: GET

Generates monthly security reports at Gusto from Splunk and Qualys.

naftiko: "0.5"
info:
  label: "Monthly Security Report Pipeline"
  description: "Generates monthly security reports at Gusto from Splunk and Qualys."
  tags:
    - security
    - reporting
    - splunk
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sec-report
      port: 8080
      tools:
        - name: gen-sec-report
          description: "Generate security report at Gusto."
          inputParameters:
            - name: month
              in: body
              type: string
              description: "Month."
          steps:
            - name: splunk
              type: call
              call: "splunk.search"
              with:
                query: "index=security earliest=-30d"
            - name: scans
              type: call
              call: "qualys.results"
              with:
                month: "{{month}}"
            - name: compile
              type: call
              call: "analytics.compile-security"
              with:
                events: "{{splunk.count}}"
                vulns: "{{scans.critical}}"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "ciso@co.com"
                subject: "Security - {{month}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.gusto.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search
              method: POST
    - type: http
      namespace: qualys
      baseUri: "https://qualysapi.qualys.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.qualys_token"
      resources:
        - name: results
          path: "/fo/scan/results"
          operations:
            - name: results
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: security
          path: "/compile"
          operations:
            - name: compile-security
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks MuleSoft API gateway health for Gusto's integration layer, returning active API count, error rate, and throughput.

naftiko: "0.5"
info:
  label: "MuleSoft Integration Health"
  description: "Checks MuleSoft API gateway health for Gusto's integration layer, returning active API count, error rate, and throughput."
  tags:
    - infrastructure
    - integration
    - mulesoft
capability:
  exposes:
    - type: mcp
      namespace: integration-health
      port: 8080
      tools:
        - name: get-integration-status
          description: "Retrieve MuleSoft API health for an environment."
          inputParameters:
            - name: environment_id
              in: body
              type: string
              description: "The MuleSoft environment ID."
          call: "mulesoft.get-api-stats"
          with:
            environment_id: "{{environment_id}}"
  consumes:
    - type: http
      namespace: mulesoft
      baseUri: "https://anypoint.mulesoft.com/analytics/1.0"
      authentication:
        type: bearer
        token: "$secrets.mulesoft_token"
      resources:
        - name: api-stats
          path: "/{{org_id}}/environments/{{environment_id}}/apis"
          inputParameters:
            - name: environment_id
              in: path
          operations:
            - name: get-api-stats
              method: GET

Onboards employees at Gusto with Okta, ServiceNow, Slack, and calendar.

naftiko: "0.5"
info:
  label: "New Employee IT Onboarding Pipeline"
  description: "Onboards employees at Gusto with Okta, ServiceNow, Slack, and calendar."
  tags:
    - hr
    - onboarding
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: it-onboarding
      port: 8080
      tools:
        - name: onboard-employee
          description: "Onboard employees at Gusto."
          inputParameters:
            - name: name
              in: body
              type: string
              description: "Name."
            - name: dept
              in: body
              type: string
              description: "Department."
            - name: start
              in: body
              type: string
              description: "Start date."
          steps:
            - name: okta
              type: call
              call: "okta.create-user"
              with:
                name: "{{name}}"
                department: "{{dept}}"
            - name: equip
              type: call
              call: "servicenow.create-request"
              with:
                type: "new_hire"
                for: "{{name}}"
            - name: slack
              type: call
              call: "slack.invite"
              with:
                email: "{{okta.email}}"
            - name: orient
              type: call
              call: "calendar.create-event"
              with:
                title: "Orientation - {{name}}"
                date: "{{start}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://gusto.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: users
          path: "/users.admin.invite"
          operations:
            - name: invite
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/hr/events"
          operations:
            - name: create-event
              method: POST

When a new hire is added, creates their payroll record in Oracle Financials, enrolls them in default benefits in Salesforce, sends a welcome email via Gmail, and notifies the HR team in Slack.

naftiko: "0.5"
info:
  label: "New Employee Payroll Setup Orchestrator"
  description: "When a new hire is added, creates their payroll record in Oracle Financials, enrolls them in default benefits in Salesforce, sends a welcome email via Gmail, and notifies the HR team in Slack."
  tags:
    - payroll
    - onboarding
    - oracle-financials
    - salesforce
    - gmail
    - slack
capability:
  exposes:
    - type: mcp
      namespace: payroll-onboarding
      port: 8080
      tools:
        - name: setup-new-employee-payroll
          description: "Given employee details, create payroll record, enroll in benefits, send welcome email, and notify HR."
          inputParameters:
            - name: employee_name
              in: body
              type: string
              description: "The new employee's full name."
            - name: employee_email
              in: body
              type: string
              description: "The new employee's email."
            - name: salary
              in: body
              type: number
              description: "Annual salary."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: company_id
              in: body
              type: string
              description: "The Gusto customer company ID."
          steps:
            - name: create-payroll
              type: call
              call: "oracle-financials.create-payroll-record"
              with:
                employee_name: "{{employee_name}}"
                email: "{{employee_email}}"
                salary: "{{salary}}"
                start_date: "{{start_date}}"
                company_id: "{{company_id}}"
            - name: enroll-benefits
              type: call
              call: "salesforce.create-enrollment"
              with:
                employee_id: "{{create-payroll.employee_id}}"
                plan_type: "default"
                effective_date: "{{start_date}}"
            - name: send-welcome
              type: call
              call: "gmail.send-email"
              with:
                to: "{{employee_email}}"
                subject: "Welcome to {{company_id}} — Your Gusto Account is Ready"
                body: "Hi {{employee_name}}, your payroll has been set up. Your first payday is based on your start date {{start_date}}. Benefits enrollment: {{enroll-benefits.enrollment_id}}."
            - name: notify-hr
              type: call
              call: "slack.post-message"
              with:
                channel: "hr-onboarding"
                text: "New employee payroll setup: {{employee_name}} at {{company_id}}. Salary: ${{salary}}. Start: {{start_date}}. Benefits enrolled. Payroll ID: {{create-payroll.employee_id}}."
  consumes:
    - type: http
      namespace: oracle-financials
      baseUri: "https://gusto.oraclecloud.com/hcmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_financials_token"
      resources:
        - name: payroll-records
          path: "/payrollRelationships"
          operations:
            - name: create-payroll-record
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: enrollments
          path: "/sobjects/BenefitsEnrollment__c"
          operations:
            - name: create-enrollment
              method: POST
    - 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-email
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Checks New Relic APM at Gusto.

naftiko: "0.5"
info:
  label: "New Relic APM Check"
  description: "Checks New Relic APM at Gusto."
  tags:
    - monitoring
    - new-relic
    - apm
capability:
  exposes:
    - type: mcp
      namespace: nr-apm
      port: 8080
      tools:
        - name: check-apm
          description: "Check APM at Gusto."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "App ID."
          call: "newrelic.get-app"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: health
              type: string
              mapping: "$.application.health_status"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.new_relic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app
              method: GET

Retrieves a Notion page by ID for product specifications, design docs, or RFC documents used by Gusto product and engineering teams.

naftiko: "0.5"
info:
  label: "Notion Product Spec Lookup"
  description: "Retrieves a Notion page by ID for product specifications, design docs, or RFC documents used by Gusto product and engineering teams."
  tags:
    - product-management
    - documentation
    - notion
capability:
  exposes:
    - type: mcp
      namespace: product-docs
      port: 8080
      tools:
        - name: get-page
          description: "Retrieve a Notion page by ID. Returns title, content blocks, and last edited info."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The Notion page ID."
          call: "notion.get-page"
          with:
            page_id: "{{page_id}}"
  consumes:
    - type: http
      namespace: notion
      baseUri: "https://api.notion.com/v1"
      authentication:
        type: bearer
        token: "$secrets.notion_token"
      resources:
        - name: pages
          path: "/pages/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET

Checks Okta user at Gusto.

naftiko: "0.5"
info:
  label: "Okta User Check"
  description: "Checks Okta user at Gusto."
  tags:
    - identity
    - okta
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: okta-user
      port: 8080
      tools:
        - name: check-user
          description: "Check user at Gusto."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Email."
          call: "okta.get-user"
          with:
            email: "{{email}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://gusto.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-user
              method: GET

When open enrollment period begins, sends notification emails via Gmail to all eligible employees, creates enrollment tracking tasks in Salesforce, updates the Confluence enrollment guide, and notifies HR in Slack.

naftiko: "0.5"
info:
  label: "Open Enrollment Orchestrator"
  description: "When open enrollment period begins, sends notification emails via Gmail to all eligible employees, creates enrollment tracking tasks in Salesforce, updates the Confluence enrollment guide, and notifies HR in Slack."
  tags:
    - benefits
    - open-enrollment
    - gmail
    - salesforce
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: open-enrollment
      port: 8080
      tools:
        - name: launch-open-enrollment
          description: "Given a company ID and enrollment window dates, send notifications, create tasks, update docs, and alert HR."
          inputParameters:
            - name: company_id
              in: body
              type: string
              description: "The Gusto customer company ID."
            - name: enrollment_start
              in: body
              type: string
              description: "Enrollment start date in YYYY-MM-DD format."
            - name: enrollment_end
              in: body
              type: string
              description: "Enrollment end date in YYYY-MM-DD format."
          steps:
            - name: send-notifications
              type: call
              call: "gmail.send-email"
              with:
                to: "all-employees@{{company_id}}.gusto.com"
                subject: "Open Enrollment Now Open — Action Required by {{enrollment_end}}"
                body: "Open enrollment for your benefits is now available from {{enrollment_start}} to {{enrollment_end}}. Log in to Gusto to review and update your elections."
            - name: create-tracking
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "Open Enrollment {{company_id}} — {{enrollment_start}}"
                type: "Benefits Enrollment"
                start_date: "{{enrollment_start}}"
                end_date: "{{enrollment_end}}"
            - name: update-guide
              type: call
              call: "confluence.update-page"
              with:
                page_id: "open-enrollment-guide"
                body: "Open enrollment window: {{enrollment_start}} to {{enrollment_end}}. Company: {{company_id}}."
            - name: notify-hr
              type: call
              call: "slack.post-message"
              with:
                channel: "hr-benefits"
                text: "Open enrollment launched for {{company_id}}: {{enrollment_start}} to {{enrollment_end}}. Notifications sent. Salesforce campaign: {{create-tracking.id}}."
  consumes:
    - 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-email
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://gusto.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: update-page
              method: PUT
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Checks on-call at Gusto.

naftiko: "0.5"
info:
  label: "PagerDuty On-Call Check"
  description: "Checks on-call at Gusto."
  tags:
    - incident-management
    - pagerduty
    - on-call
capability:
  exposes:
    - type: mcp
      namespace: pd-oncall
      port: 8080
      tools:
        - name: get-oncall
          description: "Check on-call at Gusto."
          inputParameters:
            - name: schedule_id
              in: body
              type: string
              description: "Schedule ID."
          call: "pagerduty.get-oncall"
          with:
            schedule_id: "{{schedule_id}}"
          outputParameters:
            - name: user
              type: string
              mapping: "$.oncalls[0].user.summary"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: oncalls
          path: "/oncalls"
          operations:
            - name: get-oncall
              method: GET

Processes quarterly payroll tax filings by aggregating data from Snowflake, generating the filing report in Google Sheets, creating a compliance task in Jira, and notifying the compliance team in Slack.

naftiko: "0.5"
info:
  label: "Payroll Tax Filing Orchestrator"
  description: "Processes quarterly payroll tax filings by aggregating data from Snowflake, generating the filing report in Google Sheets, creating a compliance task in Jira, and notifying the compliance team in Slack."
  tags:
    - payroll
    - compliance
    - tax-filing
    - snowflake
    - google-sheets
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: tax-filing
      port: 8080
      tools:
        - name: process-quarterly-filing
          description: "Given a quarter and year, aggregate tax data, generate report, create compliance task, and notify the team."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "The quarter (Q1, Q2, Q3, Q4)."
            - name: year
              in: body
              type: string
              description: "The tax year."
          steps:
            - name: aggregate-tax-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT state, SUM(tax_withheld) as total_withheld, COUNT(DISTINCT employee_id) as employee_count FROM payroll_tax WHERE quarter='{{quarter}}' AND year='{{year}}' GROUP BY state"
                warehouse: "PAYROLL_WH"
            - name: generate-report
              type: call
              call: "google-sheets.create-spreadsheet"
              with:
                title: "Tax Filing Report — {{quarter}} {{year}}"
                data: "{{aggregate-tax-data.results}}"
            - name: create-compliance-task
              type: call
              call: "jira.create-issue"
              with:
                project: "COMPLY"
                summary: "Quarterly tax filing: {{quarter}} {{year}}"
                description: "Tax data aggregated. States: {{aggregate-tax-data.state_count}}. Report: {{generate-report.url}}."
                issue_type: "Task"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "compliance"
                text: "Quarterly tax filing ready: {{quarter}} {{year}}. States: {{aggregate-tax-data.state_count}}. Report: {{generate-report.url}}. Jira: {{create-compliance-task.key}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Runs a Postman monitor collection to health-check Gusto's public APIs and returns pass/fail results with response times.

naftiko: "0.5"
info:
  label: "Postman API Health Check"
  description: "Runs a Postman monitor collection to health-check Gusto's public APIs and returns pass/fail results with response times."
  tags:
    - engineering
    - api-testing
    - postman
capability:
  exposes:
    - type: mcp
      namespace: api-health
      port: 8080
      tools:
        - name: run-api-health-check
          description: "Trigger a Postman monitor run by monitor ID. Returns pass/fail and response times."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Postman monitor ID."
          call: "postman.run-monitor"
          with:
            monitor_id: "{{monitor_id}}"
  consumes:
    - type: http
      namespace: postman
      baseUri: "https://api.getpostman.com"
      authentication:
        type: apiKey
        name: "X-Api-Key"
        in: header
        value: "$secrets.postman_api_key"
      resources:
        - name: monitors
          path: "/monitors/{{monitor_id}}/run"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: run-monitor
              method: POST

Creates postmortems at Gusto.

naftiko: "0.5"
info:
  label: "Incident Postmortem Pipeline"
  description: "Creates postmortems at Gusto."
  tags:
    - incident-management
    - postmortem
    - pagerduty
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: postmortem
      port: 8080
      tools:
        - name: create-postmortem
          description: "Create postmortem at Gusto."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Incident ID."
          steps:
            - name: timeline
              type: call
              call: "pagerduty.get-log"
              with:
                id: "{{incident_id}}"
            - name: metrics
              type: call
              call: "datadog.get-metrics"
              with:
                incident: "{{incident_id}}"
            - name: doc
              type: call
              call: "confluence.create-page"
              with:
                title: "Postmortem: {{timeline.title}}"
                body: "Impact: {{metrics.impact}}"
            - name: review
              type: call
              call: "calendar.create-event"
              with:
                title: "Review: {{timeline.title}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents/{{id}}/log_entries"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-log
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://gusto.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/sre/events"
          operations:
            - name: create-event
              method: POST

Checks Power BI refresh at Gusto.

naftiko: "0.5"
info:
  label: "Power BI Refresh Check"
  description: "Checks Power BI refresh at Gusto."
  tags:
    - analytics
    - power-bi
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: pbi-refresh
      port: 8080
      tools:
        - name: check-refresh
          description: "Check refresh at Gusto."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Dataset ID."
          call: "power-bi.get-refresh"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh
              method: GET

Coordinates a feature release by checking GitHub CI status, updating the Confluence release notes, creating a Zendesk article for customer support, and announcing in Slack.

naftiko: "0.5"
info:
  label: "Product Feature Release Pipeline"
  description: "Coordinates a feature release by checking GitHub CI status, updating the Confluence release notes, creating a Zendesk article for customer support, and announcing in Slack."
  tags:
    - engineering
    - release
    - github
    - confluence
    - zendesk
    - slack
capability:
  exposes:
    - type: mcp
      namespace: release-mgmt
      port: 8080
      tools:
        - name: release-feature
          description: "Given a feature name and version, check CI, update docs, create support article, and announce."
          inputParameters:
            - name: feature_name
              in: body
              type: string
              description: "The feature name."
            - name: version
              in: body
              type: string
              description: "The release version."
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository (owner/repo)."
          steps:
            - name: check-ci
              type: call
              call: "github.get-latest-workflow"
              with:
                repo: "{{repo_name}}"
            - name: update-release-notes
              type: call
              call: "confluence.create-page"
              with:
                space_key: "ENG"
                title: "Release Notes: {{feature_name}} v{{version}}"
                body: "Feature: {{feature_name}}. Version: {{version}}. CI status: {{check-ci.conclusion}}. Released: today."
            - name: create-support-article
              type: call
              call: "zendesk.create-article"
              with:
                title: "New Feature: {{feature_name}}"
                body: "We've released {{feature_name}} (v{{version}}). Here's what's new and how to use it."
                section_id: "product-updates"
            - name: announce
              type: call
              call: "slack.post-message"
              with:
                channel: "product-releases"
                text: "Released: {{feature_name}} v{{version}}. CI: {{check-ci.conclusion}}. Release notes: {{update-release-notes.url}}. Support article: {{create-support-article.url}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflows
          path: "/repos/{{repo}}/actions/runs?per_page=1"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-latest-workflow
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://gusto.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://gusto.zendesk.com/api/v2/help_center"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: articles
          path: "/sections/{{section_id}}/articles"
          inputParameters:
            - name: section_id
              in: path
          operations:
            - name: create-article
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Queries Prometheus metrics at Gusto.

naftiko: "0.5"
info:
  label: "Prometheus Metrics Query"
  description: "Queries Prometheus metrics at Gusto."
  tags:
    - monitoring
    - prometheus
    - metrics
capability:
  exposes:
    - type: mcp
      namespace: prom
      port: 8080
      tools:
        - name: query
          description: "Query Prometheus at Gusto."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "PromQL query."
          call: "prometheus.query"
          with:
            query: "{{query}}"
          outputParameters:
            - name: value
              type: number
              mapping: "$.data.result[0].value[1]"
  consumes:
    - type: http
      namespace: prometheus
      baseUri: "https://prometheus.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.prometheus_token"
      resources:
        - name: queries
          path: "/query"
          operations:
            - name: query
              method: GET

Generates compliance reports at Gusto from Snowflake, Power BI, and email.

naftiko: "0.5"
info:
  label: "Quarterly Compliance Report Pipeline"
  description: "Generates compliance reports at Gusto from Snowflake, Power BI, and email."
  tags:
    - compliance
    - reporting
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: compliance-rpt
      port: 8080
      tools:
        - name: gen-report
          description: "Generate compliance reports at Gusto."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "Quarter."
            - name: type
              in: body
              type: string
              description: "Type."
          steps:
            - name: data
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT * FROM compliance WHERE q='{{quarter}}'"
            - name: metrics
              type: call
              call: "analytics.compute"
              with:
                data: "{{data.results}}"
            - name: refresh
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "compliance"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "compliance@co.com"
                subject: "{{type}} - {{quarter}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: metrics
          path: "/compute"
          operations:
            - name: compute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks Redis at Gusto.

naftiko: "0.5"
info:
  label: "Redis Cache Status"
  description: "Checks Redis at Gusto."
  tags:
    - caching
    - redis
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: redis
      port: 8080
      tools:
        - name: check-cache
          description: "Check Redis at Gusto."
          inputParameters:
            - name: instance
              in: body
              type: string
              description: "Instance ID."
          call: "redis.get-info"
          with:
            instance: "{{instance}}"
          outputParameters:
            - name: memory
              type: string
              mapping: "$.used_memory_human"
  consumes:
    - type: http
      namespace: redis
      baseUri: "https://redis.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.redis_token"
      resources:
        - name: instances
          path: "/instances/{{instance}}/info"
          inputParameters:
            - name: instance
              in: path
          operations:
            - name: get-info
              method: GET

Checks release readiness at Gusto.

naftiko: "0.5"
info:
  label: "Release Readiness Pipeline"
  description: "Checks release readiness at Gusto."
  tags:
    - release-management
    - devops
    - quality
capability:
  exposes:
    - type: mcp
      namespace: release-ready
      port: 8080
      tools:
        - name: check-release
          description: "Check release at Gusto."
          inputParameters:
            - name: release_id
              in: body
              type: string
              description: "Release ID."
            - name: project
              in: body
              type: string
              description: "Project."
          steps:
            - name: tests
              type: call
              call: "azdo.get-tests"
              with:
                project: "{{project}}"
                release: "{{release_id}}"
            - name: quality
              type: call
              call: "sonarqube.get-gate"
              with:
                project: "{{project}}"
            - name: security
              type: call
              call: "security.get-scan"
              with:
                project: "{{project}}"
            - name: doc
              type: call
              call: "confluence.create-page"
              with:
                title: "Release - {{release_id}}"
                body: "Tests: {{tests.pass_rate}}% Quality: {{quality.status}}"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/gusto.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: tests
          path: "/{{project}}/_apis/test/runs"
          inputParameters:
            - name: project
              in: path
          operations:
            - name: get-tests
              method: GET
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.gusto.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: quality
          path: "/qualitygates/project_status"
          operations:
            - name: get-gate
              method: GET
    - type: http
      namespace: security
      baseUri: "https://security.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_token"
      resources:
        - name: scans
          path: "/results"
          operations:
            - name: get-scan
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://gusto.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves a Gusto SMB customer account from Salesforce by account ID, returning company name, plan tier, employee count, and account manager.

naftiko: "0.5"
info:
  label: "Salesforce Customer Account Lookup"
  description: "Retrieves a Gusto SMB customer account from Salesforce by account ID, returning company name, plan tier, employee count, and account manager."
  tags:
    - crm
    - customer-management
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-customer-account
          description: "Look up an SMB customer account in Salesforce. Returns company name, plan, employee count, and owner."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gusto.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Checks SAP PO at Gusto.

naftiko: "0.5"
info:
  label: "SAP PO Check"
  description: "Checks SAP PO at Gusto."
  tags:
    - procurement
    - sap
    - purchase-orders
capability:
  exposes:
    - type: mcp
      namespace: sap-po
      port: 8080
      tools:
        - name: get-po
          description: "Check PO at Gusto."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "PO number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: vendor
              type: string
              mapping: "$.order.vendor"
            - name: status
              type: string
              mapping: "$.order.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://sap.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: purchase-orders
          path: "/purchase-orders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Manages security training at Gusto.

naftiko: "0.5"
info:
  label: "Security Training Pipeline"
  description: "Manages security training at Gusto."
  tags:
    - security
    - training
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sec-training
      port: 8080
      tools:
        - name: manage-training
          description: "Manage training at Gusto."
          inputParameters:
            - name: campaign
              in: body
              type: string
              description: "Campaign ID."
          steps:
            - name: untrained
              type: call
              call: "lms.get-incomplete"
              with:
                campaign: "{{campaign}}"
            - name: remind
              type: call
              call: "email.batch"
              with:
                to: "{{untrained.emails}}"
                subject: "Training due"
            - name: track
              type: call
              call: "lms.get-completion"
              with:
                campaign: "{{campaign}}"
            - name: report
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "training"
  consumes:
    - type: http
      namespace: lms
      baseUri: "https://lms.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lms_token"
      resources:
        - name: campaigns
          path: "/campaigns/{{campaign}}/incomplete"
          inputParameters:
            - name: campaign
              in: path
          operations:
            - name: get-incomplete
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Remediates vulnerabilities at Gusto via scanning, Jira, and Slack.

naftiko: "0.5"
info:
  label: "Security Vulnerability Remediation Pipeline"
  description: "Remediates vulnerabilities at Gusto via scanning, Jira, and Slack."
  tags:
    - security
    - vulnerability-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: vuln-fix
      port: 8080
      tools:
        - name: remediate
          description: "Fix vulnerabilities at Gusto."
          inputParameters:
            - name: target
              in: body
              type: string
              description: "Target."
            - name: policy
              in: body
              type: string
              description: "Policy."
          steps:
            - name: scan
              type: call
              call: "qualys.scan"
              with:
                target: "{{target}}"
                policy: "{{policy}}"
            - name: prioritize
              type: call
              call: "security.prioritize"
              with:
                scan: "{{scan.id}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "Vulns: {{prioritize.critical}} critical"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#security"
                text: "Scan: {{prioritize.critical}} critical"
  consumes:
    - type: http
      namespace: qualys
      baseUri: "https://qualysapi.qualys.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.qualys_token"
      resources:
        - name: scans
          path: "/fo/scan"
          operations:
            - name: scan
              method: POST
    - type: http
      namespace: security
      baseUri: "https://security.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_token"
      resources:
        - name: vulns
          path: "/prioritize"
          operations:
            - name: prioritize
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gusto.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When Sentry detects a new error spike, creates a Jira bug ticket, posts the error details to the engineering Slack channel, and logs the incident in Confluence.

naftiko: "0.5"
info:
  label: "Sentry Error Alert Pipeline"
  description: "When Sentry detects a new error spike, creates a Jira bug ticket, posts the error details to the engineering Slack channel, and logs the incident in Confluence."
  tags:
    - engineering
    - error-tracking
    - sentry-system
    - jira
    - slack
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: error-response
      port: 8080
      tools:
        - name: handle-error-spike
          description: "Given a Sentry issue ID and error details, create Jira bug, notify engineering, and document."
          inputParameters:
            - name: sentry_issue_id
              in: body
              type: string
              description: "The Sentry issue ID."
            - name: error_title
              in: body
              type: string
              description: "The error title."
            - name: error_count
              in: body
              type: number
              description: "Number of occurrences in the spike."
            - name: affected_service
              in: body
              type: string
              description: "The affected service name."
          steps:
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project: "ENG"
                summary: "Error spike: {{error_title}} in {{affected_service}}"
                description: "Sentry issue: {{sentry_issue_id}}. Occurrences: {{error_count}}. Service: {{affected_service}}."
                issue_type: "Bug"
                priority: "High"
            - name: notify-engineering
              type: call
              call: "slack.post-message"
              with:
                channel: "engineering-alerts"
                text: "ERROR SPIKE: {{error_title}} in {{affected_service}} ({{error_count}} occurrences). Sentry: {{sentry_issue_id}}. Jira: {{create-bug.key}}."
            - name: document-incident
              type: call
              call: "confluence.create-page"
              with:
                space_key: "INCIDENTS"
                title: "Error Spike: {{error_title}} — {{affected_service}}"
                body: "Sentry: {{sentry_issue_id}}. Error: {{error_title}}. Service: {{affected_service}}. Count: {{error_count}}. Jira: {{create-bug.key}}."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://gusto.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://gusto.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Checks IT incident in ServiceNow for Gusto.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Detail Check"
  description: "Checks IT incident in ServiceNow for Gusto."
  tags:
    - it-service
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: snow-incident
      port: 8080
      tools:
        - name: check-incident
          description: "Check incident at Gusto."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "Incident number."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET

Retrieves SharePoint metadata at Gusto.

naftiko: "0.5"
info:
  label: "SharePoint File Metadata"
  description: "Retrieves SharePoint metadata at Gusto."
  tags:
    - document-management
    - sharepoint
    - collaboration
capability:
  exposes:
    - type: mcp
      namespace: sp-docs
      port: 8080
      tools:
        - name: get-file
          description: "Look up file at Gusto."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "Site ID."
            - name: file_path
              in: body
              type: string
              description: "Path."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            path: "{{file_path}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: size
              type: number
              mapping: "$.size"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: files
          path: "/sites/{{site_id}}/drive/root:/{{path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: path
              in: path
          operations:
            - name: get-file
              method: GET

Monitors SLAs at Gusto via Datadog and Slack.

naftiko: "0.5"
info:
  label: "SLA Monitoring Pipeline"
  description: "Monitors SLAs at Gusto via Datadog and Slack."
  tags:
    - operations
    - sla
    - datadog
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sla-monitor
      port: 8080
      tools:
        - name: check-sla
          description: "Monitor SLAs at Gusto."
          inputParameters:
            - name: service
              in: body
              type: string
              description: "Service."
            - name: target
              in: body
              type: number
              description: "SLA target %."
          steps:
            - name: metrics
              type: call
              call: "datadog.get-sla"
              with:
                service: "{{service}}"
            - name: check
              type: call
              call: "analytics.check-sla"
              with:
                uptime: "{{metrics.uptime}}"
                target: "{{target}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)"
            - name: log
              type: call
              call: "servicenow.create-incident"
              with:
                desc: "SLA breach: {{service}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: get-sla
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gusto.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Sends a notification message to a Slack channel for operational alerts, release announcements, or team updates.

naftiko: "0.5"
info:
  label: "Slack Channel Notification"
  description: "Sends a notification message to a Slack channel for operational alerts, release announcements, or team updates."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: notifications
      port: 8080
      tools:
        - name: send-slack-message
          description: "Post a message to a Slack channel."
          inputParameters:
            - name: channel
              in: body
              type: string
              description: "The Slack channel name or ID."
            - name: message
              in: body
              type: string
              description: "The message text."
          call: "slack.post-message"
          with:
            channel: "{{channel}}"
            text: "{{message}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Executes a SQL query against Gusto's Snowflake data warehouse for payroll analytics, compliance reporting, and product usage metrics.

naftiko: "0.5"
info:
  label: "Snowflake Analytics Query"
  description: "Executes a SQL query against Gusto's Snowflake data warehouse for payroll analytics, compliance reporting, and product usage metrics."
  tags:
    - data-analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: data-warehouse
      port: 8080
      tools:
        - name: run-query
          description: "Execute a SQL query against Snowflake."
          inputParameters:
            - name: sql_statement
              in: body
              type: string
              description: "The SQL query."
            - name: warehouse
              in: body
              type: string
              description: "The Snowflake warehouse."
          call: "snowflake.execute-statement"
          with:
            statement: "{{sql_statement}}"
            warehouse: "{{warehouse}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST

Checks Snowflake warehouse usage at Gusto.

naftiko: "0.5"
info:
  label: "Snowflake Warehouse Usage"
  description: "Checks Snowflake warehouse usage at Gusto."
  tags:
    - data
    - snowflake
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: sf-usage
      port: 8080
      tools:
        - name: check-warehouse
          description: "Check warehouse at Gusto."
          inputParameters:
            - name: warehouse
              in: body
              type: string
              description: "Warehouse."
          call: "snowflake.get-usage"
          with:
            warehouse: "{{warehouse}}"
          outputParameters:
            - name: credits
              type: number
              mapping: "$.data.credits_used"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: warehouses
          path: "/statements"
          operations:
            - name: get-usage
              method: GET

Checks code quality at Gusto.

naftiko: "0.5"
info:
  label: "SonarQube Quality Check"
  description: "Checks code quality at Gusto."
  tags:
    - code-quality
    - sonarqube
    - devops
capability:
  exposes:
    - type: mcp
      namespace: sq
      port: 8080
      tools:
        - name: check-quality
          description: "Check quality at Gusto."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Project key."
          call: "sonarqube.get-measures"
          with:
            project: "{{project}}"
          outputParameters:
            - name: bugs
              type: number
              mapping: "$.component.measures[0].value"
  consumes:
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.gusto.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: measures
          path: "/measures/component"
          operations:
            - name: get-measures
              method: GET

Searches Splunk at Gusto.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Searches Splunk at Gusto."
  tags:
    - security
    - splunk
    - logging
capability:
  exposes:
    - type: mcp
      namespace: splunk-search
      port: 8080
      tools:
        - name: search-logs
          description: "Search logs at Gusto."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "SPL query."
          call: "splunk.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.results.count"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.gusto.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search
              method: POST

Retrieves Teams activity at Gusto.

naftiko: "0.5"
info:
  label: "Teams Channel Activity"
  description: "Retrieves Teams activity at Gusto."
  tags:
    - communications
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: teams-activity
      port: 8080
      tools:
        - name: get-activity
          description: "Check Teams activity at Gusto."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "Team ID."
            - name: channel_id
              in: body
              type: string
              description: "Channel ID."
          call: "teams.get-messages"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.value.length"
  consumes:
    - 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: get-messages
              method: GET

Checks Terraform workspace at Gusto.

naftiko: "0.5"
info:
  label: "Terraform Workspace Check"
  description: "Checks Terraform workspace at Gusto."
  tags:
    - infrastructure
    - terraform
    - iac
capability:
  exposes:
    - type: mcp
      namespace: tf-ws
      port: 8080
      tools:
        - name: check-ws
          description: "Check workspace at Gusto."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Workspace ID."
          call: "terraform.get-ws"
          with:
            workspace_id: "{{workspace_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.data.attributes.name"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/workspaces/{{workspace_id}}"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: get-ws
              method: GET

Checks Vault secret at Gusto.

naftiko: "0.5"
info:
  label: "Vault Secret Metadata"
  description: "Checks Vault secret at Gusto."
  tags:
    - security
    - vault
    - secrets-management
capability:
  exposes:
    - type: mcp
      namespace: vault
      port: 8080
      tools:
        - name: check-secret
          description: "Check secret at Gusto."
          inputParameters:
            - name: path
              in: body
              type: string
              description: "Secret path."
          call: "vault.get-metadata"
          with:
            path: "{{path}}"
          outputParameters:
            - name: version
              type: number
              mapping: "$.data.current_version"
  consumes:
    - type: http
      namespace: vault
      baseUri: "https://vault.gusto.com/v1"
      authentication:
        type: bearer
        token: "$secrets.vault_token"
      resources:
        - name: secrets
          path: "/secret/metadata/{{path}}"
          inputParameters:
            - name: path
              in: path
          operations:
            - name: get-metadata
              method: GET

Processes invoices at Gusto via OCR, SAP matching, approval, and Oracle recording.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing Pipeline"
  description: "Processes invoices at Gusto via OCR, SAP matching, approval, and Oracle recording."
  tags:
    - finance
    - accounts-payable
    - sap
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: invoice-proc
      port: 8080
      tools:
        - name: process-invoice
          description: "Process invoices at Gusto."
          inputParameters:
            - name: invoice_id
              in: body
              type: string
              description: "Invoice ID."
            - name: vendor_id
              in: body
              type: string
              description: "Vendor ID."
          steps:
            - name: extract
              type: call
              call: "ocr.extract"
              with:
                doc: "{{invoice_id}}"
            - name: match
              type: call
              call: "sap.match-po"
              with:
                vendor: "{{vendor_id}}"
                amount: "{{extract.total}}"
            - name: approve
              type: call
              call: "workflow.submit"
              with:
                invoice: "{{invoice_id}}"
            - name: record
              type: call
              call: "oracle.create-payment"
              with:
                invoice: "{{invoice_id}}"
  consumes:
    - type: http
      namespace: ocr
      baseUri: "https://ocr.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ocr_token"
      resources:
        - name: invoices
          path: "/extract"
          operations:
            - name: extract
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://sap.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: pos
          path: "/match"
          operations:
            - name: match-po
              method: POST
    - type: http
      namespace: workflow
      baseUri: "https://workflow.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workflow_token"
      resources:
        - name: approvals
          path: "/submit"
          operations:
            - name: submit
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://oracle.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: payments
          path: "/payments"
          operations:
            - name: create-payment
              method: POST

Reviews vendors at Gusto.

naftiko: "0.5"
info:
  label: "Quarterly Vendor Review Pipeline"
  description: "Reviews vendors at Gusto."
  tags:
    - procurement
    - vendor-management
    - review
capability:
  exposes:
    - type: mcp
      namespace: vendor-review
      port: 8080
      tools:
        - name: review-vendor
          description: "Review vendors at Gusto."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Vendor ID."
            - name: quarter
              in: body
              type: string
              description: "Quarter."
          steps:
            - name: perf
              type: call
              call: "procurement.get-metrics"
              with:
                vendor: "{{vendor_id}}"
                q: "{{quarter}}"
            - name: scorecard
              type: call
              call: "analytics.scorecard"
              with:
                data: "{{perf.data}}"
            - name: invite
              type: call
              call: "email.send"
              with:
                to: "{{perf.contact}}"
                subject: "QBR - {{quarter}}"
            - name: schedule
              type: call
              call: "calendar.create-event"
              with:
                title: "QBR - {{perf.name}}"
  consumes:
    - type: http
      namespace: procurement
      baseUri: "https://procurement.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.procurement_token"
      resources:
        - name: vendors
          path: "/vendors/{{vendor}}/metrics"
          inputParameters:
            - name: vendor
              in: path
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: scorecards
          path: "/compute"
          operations:
            - name: scorecard
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/proc/events"
          operations:
            - name: create-event
              method: POST

Aggregates weekly payroll processing metrics from Snowflake, creates a summary in Google Sheets, refreshes the Looker dashboard, and posts results to Slack.

naftiko: "0.5"
info:
  label: "Weekly Payroll Processing Report"
  description: "Aggregates weekly payroll processing metrics from Snowflake, creates a summary in Google Sheets, refreshes the Looker dashboard, and posts results to Slack."
  tags:
    - payroll
    - reporting
    - snowflake
    - google-sheets
    - looker
    - slack
capability:
  exposes:
    - type: mcp
      namespace: payroll-reporting
      port: 8080
      tools:
        - name: generate-weekly-payroll-report
          description: "Given a week ending date, aggregate metrics, create spreadsheet, refresh dashboard, and notify."
          inputParameters:
            - name: week_ending
              in: body
              type: string
              description: "Week ending date in YYYY-MM-DD format."
          steps:
            - name: get-metrics
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT COUNT(DISTINCT company_id) as companies, COUNT(DISTINCT employee_id) as employees, SUM(gross_pay) as total_gross FROM payroll_runs WHERE week_ending='{{week_ending}}'"
                warehouse: "PAYROLL_WH"
            - name: create-report
              type: call
              call: "google-sheets.create-spreadsheet"
              with:
                title: "Payroll Report — W/E {{week_ending}}"
                data: "{{get-metrics.results}}"
            - name: refresh-dashboard
              type: call
              call: "looker.run-look"
              with:
                look_id: "weekly-payroll-summary"
            - name: post-summary
              type: call
              call: "slack.post-message"
              with:
                channel: "payroll-ops"
                text: "Weekly Payroll Report (w/e {{week_ending}}): {{get-metrics.companies}} companies, {{get-metrics.employees}} employees, ${{get-metrics.total_gross}} gross pay processed. Report: {{create-report.url}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://gusto.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST
    - type: http
      namespace: looker
      baseUri: "https://gusto.cloud.looker.com/api/4.0"
      authentication:
        type: bearer
        token: "$secrets.looker_token"
      resources:
        - name: looks
          path: "/looks/{{look_id}}/run/json"
          inputParameters:
            - name: look_id
              in: path
          operations:
            - name: run-look
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves employee profile from Workday for Gusto.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves employee profile from Workday for Gusto."
  tags:
    - hr
    - workday
    - employee-directory
capability:
  exposes:
    - type: mcp
      namespace: workday-profile
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up Gusto employee in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Employee ID."
          call: "workday.get-worker"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.worker.name"
            - name: title
              type: string
              mapping: "$.worker.title"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5.gusto.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET

Retrieves a Zendesk support ticket by ID, returning subject, status, priority, assignee, and customer details.

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

Checks Zendesk ticket at Gusto.

naftiko: "0.5"
info:
  label: "Zendesk Ticket Check"
  description: "Checks Zendesk ticket at Gusto."
  tags:
    - support
    - zendesk
    - ticketing
capability:
  exposes:
    - type: mcp
      namespace: zd-ticket
      port: 8080
      tools:
        - name: check-ticket
          description: "Check ticket at Gusto."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "Ticket ID."
          call: "zendesk.get-ticket"
          with:
            id: "{{ticket_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.ticket.status"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://gusto.com.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{id}}.json"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-ticket
              method: GET