Hilton Capabilities

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

Sort
Expand

Retrieves booking funnel conversion data from Adobe Analytics for Hilton.com, returning step-by-step drop-off rates from search to confirmation.

naftiko: "0.5"
info:
  label: "Adobe Analytics Booking Funnel Report"
  description: "Retrieves booking funnel conversion data from Adobe Analytics for Hilton.com, returning step-by-step drop-off rates from search to confirmation."
  tags:
    - marketing
    - adobe-analytics
    - reporting
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: digital-analytics
      port: 8080
      tools:
        - name: get-booking-funnel
          description: "Given a date range, retrieve booking funnel conversion metrics from Adobe Analytics."
          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: "adobe-analytics.get-funnel-report"
          with:
            report_suite: "hilton-booking"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: search_to_select_rate
              type: string
              mapping: "$.report.data.steps[0].conversion_rate"
            - name: select_to_book_rate
              type: string
              mapping: "$.report.data.steps[1].conversion_rate"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/hilton"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/reports"
          operations:
            - name: get-funnel-report
              method: POST

Uses the Anthropic API to analyze a batch of guest review texts from Salesforce, classifying sentiment and surfacing key themes for property management reporting.

naftiko: "0.5"
info:
  label: "AI Guest Review Sentiment Analysis"
  description: "Uses the Anthropic API to analyze a batch of guest review texts from Salesforce, classifying sentiment and surfacing key themes for property management reporting."
  tags:
    - ai
    - guest-experience
    - anthropic
    - salesforce
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: ai-guest-insights
      port: 8080
      tools:
        - name: analyze-guest-reviews
          description: "Given a batch of guest review texts, call the Anthropic API to classify sentiment (positive, neutral, negative) and extract top themes (cleanliness, service, amenities, value). Use for weekly property performance reviews."
          inputParameters:
            - name: review_texts
              in: body
              type: string
              description: "Concatenated guest review texts to analyze, separated by newlines."
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code the reviews belong to."
            - name: target_channel_id
              in: body
              type: string
              description: "The Teams channel ID where the sentiment report should be posted."
          steps:
            - name: analyze-sentiment
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-3-5-sonnet-20241022"
                prompt: "Analyze the following hotel guest reviews and provide: 1) Overall sentiment (positive/neutral/negative percentage), 2) Top 3 praised themes, 3) Top 3 complaints. Reviews:\n\n{{review_texts}}"
            - name: post-report
              type: call
              call: "msteams-reviews.post-channel-message"
              with:
                channel_id: "{{target_channel_id}}"
                message: "Guest Review Sentiment Report | Property: {{property_code}}\n\n{{analyze-sentiment.content}}"
  consumes:
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: msteams-reviews
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Uses the Anthropic API to summarize Teams meeting transcript text into structured action items and key decisions, posting the summary to the relevant SharePoint document library.

naftiko: "0.5"
info:
  label: "AI Meeting Notes Summarizer"
  description: "Uses the Anthropic API to summarize Teams meeting transcript text into structured action items and key decisions, posting the summary to the relevant SharePoint document library."
  tags:
    - ai
    - automation
    - anthropic
    - sharepoint
    - microsoft-teams
    - productivity
capability:
  exposes:
    - type: mcp
      namespace: ai-productivity
      port: 8080
      tools:
        - name: summarize-meeting-notes
          description: "Given a Teams meeting transcript and meeting title, call the Anthropic API to extract action items and key decisions, then store the summary in SharePoint. Use after hotel leadership and operations review meetings."
          inputParameters:
            - name: transcript_text
              in: body
              type: string
              description: "The full text of the Teams meeting transcript."
            - name: meeting_title
              in: body
              type: string
              description: "The title of the meeting, e.g. Q2 Revenue Strategy Review."
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID where the meeting summary should be stored."
          steps:
            - name: generate-summary
              type: call
              call: "anthropic-notes.create-message"
              with:
                model: "claude-3-5-sonnet-20241022"
                prompt: "Extract structured meeting notes from this transcript. Format as: 1) Key Decisions (bullet points), 2) Action Items with owner and due date, 3) Key Discussion Points. Transcript:\n\n{{transcript_text}}"
            - name: store-summary
              type: call
              call: "sharepoint-notes.create-item"
              with:
                site_id: "{{site_id}}"
                title: "{{meeting_title}} - Meeting Summary"
                content: "{{generate-summary.content}}"
  consumes:
    - type: http
      namespace: anthropic-notes
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: sharepoint-notes
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/sites/{{site_id}}/lists/MeetingNotes/items"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: create-item
              method: POST

Verifies the integrity and timeliness of data backups stored in Amazon S3, checking object counts, last modified timestamps, and lifecycle policy compliance.

naftiko: "0.5"
info:
  label: "Amazon S3 Data Backup Verification"
  description: "Verifies the integrity and timeliness of data backups stored in Amazon S3, checking object counts, last modified timestamps, and lifecycle policy compliance."
  tags:
    - infrastructure
    - amazon-s3
    - data-protection
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: backup-ops
      port: 8080
      tools:
        - name: verify-s3-backup
          description: "Given an S3 bucket name and prefix, verify backup completeness and recency."
          inputParameters:
            - name: bucket_name
              in: body
              type: string
              description: "The S3 bucket name."
            - name: prefix
              in: body
              type: string
              description: "The S3 key prefix for the backup set."
          call: "s3.list-objects"
          with:
            bucket: "{{bucket_name}}"
            prefix: "{{prefix}}"
          outputParameters:
            - name: object_count
              type: string
              mapping: "$.KeyCount"
            - name: latest_modified
              type: string
              mapping: "$.Contents[-1].LastModified"
  consumes:
    - type: http
      namespace: s3
      baseUri: "https://s3.amazonaws.com"
      authentication:
        type: aws-sigv4
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: objects
          path: "/{{bucket}}"
          inputParameters:
            - name: bucket
              in: path
          operations:
            - name: list-objects
              method: GET

Broadcasts operational alerts through Amazon SNS topics for critical hotel system events, coordinating with ServiceNow incident creation and Teams notifications.

naftiko: "0.5"
info:
  label: "Amazon SNS Operational Alert Broadcaster"
  description: "Broadcasts operational alerts through Amazon SNS topics for critical hotel system events, coordinating with ServiceNow incident creation and Teams notifications."
  tags:
    - operations
    - amazon-sns
    - servicenow
    - microsoft-teams
    - alerting
capability:
  exposes:
    - type: mcp
      namespace: operational-alerts
      port: 8080
      tools:
        - name: broadcast-alert
          description: "Given an alert message and severity, publish to SNS, create a ServiceNow incident, and notify Teams."
          inputParameters:
            - name: topic_arn
              in: body
              type: string
              description: "The SNS topic ARN."
            - name: subject
              in: body
              type: string
              description: "Alert subject line."
            - name: message
              in: body
              type: string
              description: "Alert message body."
            - name: severity
              in: body
              type: string
              description: "Alert severity: critical, high, medium, low."
          steps:
            - name: publish-sns
              type: call
              call: "sns.publish"
              with:
                topic_arn: "{{topic_arn}}"
                subject: "{{subject}}"
                message: "{{message}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "{{subject}}"
                description: "{{message}}"
                urgency: "{{severity}}"
                assigned_to: "Operations_Center"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "operations-center"
                message: "[{{severity}}] {{subject}}: {{message}}. Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: sns
      baseUri: "https://sns.us-east-1.amazonaws.com"
      authentication:
        type: aws-sigv4
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: topics
          path: "/"
          operations:
            - name: publish
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Audits Azure AD conditional access policies, compares against security baselines, generates a compliance report in SharePoint, and notifies the security team.

naftiko: "0.5"
info:
  label: "Azure Active Directory Conditional Access Policy Audit"
  description: "Audits Azure AD conditional access policies, compares against security baselines, generates a compliance report in SharePoint, and notifies the security team."
  tags:
    - security
    - azure-active-directory
    - sharepoint
    - microsoft-teams
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: identity-security
      port: 8080
      tools:
        - name: audit-conditional-access
          description: "Retrieve all conditional access policies, compare to baseline, and generate a compliance report."
          inputParameters:
            - name: baseline_id
              in: body
              type: string
              description: "The security baseline document ID."
          steps:
            - name: get-policies
              type: call
              call: "azuread.list-conditional-access-policies"
              with: {}
            - name: create-report
              type: call
              call: "sharepoint.create-item"
              with:
                site_id: "hilton-security"
                list_name: "ComplianceReports"
                fields:
                  report_type: "conditional-access-audit"
                  policy_count: "{{get-policies.value.length}}"
                  baseline: "{{baseline_id}}"
            - name: notify-security
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "security-governance"
                message: "Conditional Access Policy audit complete. {{get-policies.value.length}} policies reviewed against baseline {{baseline_id}}. Report: {{create-report.webUrl}}"
  consumes:
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: conditional-access
          path: "/identity/conditionalAccess/policies"
          operations:
            - name: list-conditional-access-policies
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/sites/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: create-item
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Initiates a quarterly user access review in Azure Active Directory for a specified application, creates a ServiceNow tracking ticket, and notifies the security team via Teams.

naftiko: "0.5"
info:
  label: "Azure AD User Access Review Trigger"
  description: "Initiates a quarterly user access review in Azure Active Directory for a specified application, creates a ServiceNow tracking ticket, and notifies the security team via Teams."
  tags:
    - security
    - azure-active-directory
    - servicenow
    - microsoft-teams
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: identity-governance
      port: 8080
      tools:
        - name: trigger-access-review
          description: "Given an Azure AD application ID, create an access review, open a ServiceNow ticket, and notify the security team."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The Azure AD application registration ID."
            - name: review_period_days
              in: body
              type: string
              description: "Number of days for the review period."
          steps:
            - name: create-review
              type: call
              call: "azuread.create-access-review"
              with:
                app_id: "{{app_id}}"
                duration_days: "{{review_period_days}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Quarterly access review initiated for app {{app_id}}"
                category: "security_compliance"
                assigned_to: "Identity_Governance"
            - name: notify-security
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "security-team"
                message: "Access review created for application {{app_id}}. Review ID: {{create-review.id}}. Duration: {{review_period_days}} days. Tracking ticket: {{create-ticket.number}}"
  consumes:
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: access-reviews
          path: "/identityGovernance/accessReviews/definitions"
          operations:
            - name: create-access-review
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When Azure Cost Management detects a spending anomaly across Hilton's cloud subscriptions, creates a ServiceNow incident and notifies the FinOps Teams channel with overage and affected subscription details.

naftiko: "0.5"
info:
  label: "Azure Cost Anomaly Responder"
  description: "When Azure Cost Management detects a spending anomaly across Hilton's cloud subscriptions, creates a ServiceNow incident and notifies the FinOps Teams channel with overage and affected subscription details."
  tags:
    - cloud
    - finops
    - azure
    - servicenow
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an Azure subscription ID, anomaly description, and estimated overage, create a ServiceNow incident and notify the FinOps channel in Teams. Use when Azure budget alerts or cost anomalies fire."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID with the detected anomaly."
            - name: anomaly_description
              in: body
              type: string
              description: "Description of the cost anomaly, including affected service and region."
            - name: estimated_overage_usd
              in: body
              type: string
              description: "Estimated monthly overage in USD."
          steps:
            - name: create-incident
              type: call
              call: "servicenow-cloud.create-incident"
              with:
                short_description: "Azure cost anomaly: {{anomaly_description}} in {{subscription_id}}"
                category: "cloud_cost"
                urgency: "2"
            - name: notify-finops
              type: call
              call: "msteams-finops.post-channel-message"
              with:
                channel_id: "$secrets.teams_finops_channel_id"
                message: "Azure cost anomaly detected | Subscription: {{subscription_id}} | Overage: ${{estimated_overage_usd}} | {{anomaly_description}} | Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow-cloud
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-finops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Monitors Azure Data Factory pipeline runs for data integration workflows, detects failures, and creates ServiceNow incidents with pipeline details and error logs.

naftiko: "0.5"
info:
  label: "Azure Data Factory Pipeline Run Monitor"
  description: "Monitors Azure Data Factory pipeline runs for data integration workflows, detects failures, and creates ServiceNow incidents with pipeline details and error logs."
  tags:
    - data-engineering
    - azure-data-factory
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data-integration
      port: 8080
      tools:
        - name: monitor-adf-pipeline
          description: "Given an ADF pipeline name, check the latest run and escalate failures."
          inputParameters:
            - name: pipeline_name
              in: body
              type: string
              description: "The Azure Data Factory pipeline name."
            - name: factory_name
              in: body
              type: string
              description: "The ADF factory name."
          steps:
            - name: get-runs
              type: call
              call: "adf.get-pipeline-runs"
              with:
                factory_name: "{{factory_name}}"
                pipeline_name: "{{pipeline_name}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "ADF pipeline failure: {{pipeline_name}} in {{factory_name}}"
                category: "data_engineering"
                assigned_to: "Data_Integration"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "data-engineering"
                message: "ADF Pipeline {{pipeline_name}} - Status: {{get-runs.value[0].status}}. Duration: {{get-runs.value[0].durationInMs}}ms. Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: adf
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: pipeline-runs
          path: "/subscriptions/{{sub_id}}/resourceGroups/hilton-data/providers/Microsoft.DataFactory/factories/{{factory_name}}/pipelineruns"
          inputParameters:
            - name: factory_name
              in: path
          operations:
            - name: get-pipeline-runs
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors Azure Databricks ETL pipeline runs, checks for failures, creates ServiceNow incidents for failed jobs, and notifies the data engineering team via Teams.

naftiko: "0.5"
info:
  label: "Azure Databricks ETL Pipeline Monitor"
  description: "Monitors Azure Databricks ETL pipeline runs, checks for failures, creates ServiceNow incidents for failed jobs, and notifies the data engineering team via Teams."
  tags:
    - data-engineering
    - azure-databricks
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: monitor-etl-pipeline
          description: "Given a Databricks job ID, check the latest run status and escalate failures."
          inputParameters:
            - name: job_id
              in: body
              type: string
              description: "The Databricks job ID."
          steps:
            - name: get-run
              type: call
              call: "databricks.get-latest-run"
              with:
                job_id: "{{job_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Databricks ETL failure: job {{job_id}} run {{get-run.run_id}}"
                category: "data_engineering"
                assigned_to: "Data_Engineering"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "data-engineering"
                message: "ETL pipeline failure: Job {{job_id}}, Run {{get-run.run_id}}. State: {{get-run.state.result_state}}. Error: {{get-run.state.state_message}}. Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://hilton-databricks.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/runs/list"
          operations:
            - name: get-latest-run
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the latest deployment pipeline run status from Azure DevOps for hotel platform services and posts a deployment summary to the engineering Teams channel.

naftiko: "0.5"
info:
  label: "Azure DevOps Deployment Pipeline Status"
  description: "Retrieves the latest deployment pipeline run status from Azure DevOps for hotel platform services and posts a deployment summary to the engineering Teams channel."
  tags:
    - devops
    - cicd
    - azure
    - microsoft-teams
    - deployment
capability:
  exposes:
    - type: mcp
      namespace: devops-deployments
      port: 8080
      tools:
        - name: get-deployment-status
          description: "Given an Azure DevOps organization, project, and pipeline ID, retrieve the latest run status and post a deployment summary to the engineering channel in Teams. Use after release pipelines complete."
          inputParameters:
            - name: organization
              in: body
              type: string
              description: "The Azure DevOps organization name, e.g. hilton-tech."
            - name: project
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: pipeline_id
              in: body
              type: string
              description: "The Azure DevOps pipeline definition ID."
          steps:
            - name: get-pipeline-runs
              type: call
              call: "azuredevops.list-pipeline-runs"
              with:
                organization: "{{organization}}"
                project: "{{project}}"
                pipeline_id: "{{pipeline_id}}"
            - name: post-status
              type: call
              call: "msteams-cicd.post-channel-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                message: "Deployment Status | Project: {{project}} | Pipeline: {{pipeline_id}} | Latest run data retrieved from Azure DevOps."
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com"
      authentication:
        type: basic
        username: "$secrets.azuredevops_user"
        password: "$secrets.azuredevops_pat"
      resources:
        - name: pipeline-runs
          path: "/{{organization}}/{{project}}/_apis/pipelines/{{pipeline_id}}/runs"
          inputParameters:
            - name: organization
              in: path
            - name: project
              in: path
            - name: pipeline_id
              in: path
          operations:
            - name: list-pipeline-runs
              method: GET
    - type: http
      namespace: msteams-cicd
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Compiles release notes from Azure DevOps work items for a given release, creates a Confluence page, and notifies stakeholders via Teams.

naftiko: "0.5"
info:
  label: "Azure DevOps Release Notes Generator"
  description: "Compiles release notes from Azure DevOps work items for a given release, creates a Confluence page, and notifies stakeholders via Teams."
  tags:
    - engineering
    - azure-devops
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: release-management
      port: 8080
      tools:
        - name: generate-release-notes
          description: "Given an Azure DevOps release ID, compile work items into release notes and publish to Confluence."
          inputParameters:
            - name: release_id
              in: body
              type: string
              description: "The Azure DevOps release ID."
            - name: project
              in: body
              type: string
              description: "The Azure DevOps project name."
          steps:
            - name: get-work-items
              type: call
              call: "azuredevops.get-release-work-items"
              with:
                project: "{{project}}"
                release_id: "{{release_id}}"
            - name: create-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "ENG"
                title: "Release Notes - {{project}} - {{release_id}}"
                body: "{{get-work-items.formatted_notes}}"
            - name: notify-stakeholders
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering-releases"
                message: "Release notes published for {{project}} release {{release_id}}: {{create-page._links.webui}}. {{get-work-items.total_items}} work items included."
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/hilton"
      authentication:
        type: bearer
        token: "$secrets.azuredevops_token"
      resources:
        - name: releases
          path: "/{{project}}/_apis/release/releases/{{release_id}}/workitems"
          inputParameters:
            - name: project
              in: path
            - name: release_id
              in: path
          operations:
            - name: get-release-work-items
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://hilton.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Processes IoT telemetry data from hotel HVAC and energy systems via Azure Event Hubs, detects anomalies, and creates maintenance tickets in ServiceNow.

naftiko: "0.5"
info:
  label: "Azure Event Hubs IoT Telemetry Processor"
  description: "Processes IoT telemetry data from hotel HVAC and energy systems via Azure Event Hubs, detects anomalies, and creates maintenance tickets in ServiceNow."
  tags:
    - infrastructure
    - azure-event-hubs
    - servicenow
    - microsoft-teams
    - iot
capability:
  exposes:
    - type: mcp
      namespace: smart-building
      port: 8080
      tools:
        - name: process-iot-telemetry
          description: "Given an Event Hub namespace and property code, process recent telemetry and flag anomalies."
          inputParameters:
            - name: namespace
              in: body
              type: string
              description: "The Event Hubs namespace."
            - name: property_code
              in: body
              type: string
              description: "The hotel property code."
          steps:
            - name: get-telemetry
              type: call
              call: "eventhubs.get-events"
              with:
                namespace: "{{namespace}}"
                event_hub: "iot-{{property_code}}"
            - name: create-maintenance
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "IoT anomaly detected at {{property_code}}: {{get-telemetry.anomaly_type}}"
                category: "facilities"
                assigned_to: "Facilities_Engineering"
            - name: notify-engineering
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "property-{{property_code}}-facilities"
                message: "IoT anomaly: {{get-telemetry.anomaly_type}} at {{property_code}}. Sensor: {{get-telemetry.sensor_id}}. Value: {{get-telemetry.value}}. Maintenance ticket: {{create-maintenance.number}}"
  consumes:
    - type: http
      namespace: eventhubs
      baseUri: "https://{{namespace}}.servicebus.windows.net"
      authentication:
        type: bearer
        token: "$secrets.eventhubs_token"
      resources:
        - name: events
          path: "/{{event_hub}}/consumergroups/$Default/partitions/0/messages"
          inputParameters:
            - name: event_hub
              in: path
          operations:
            - name: get-events
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Tracks Azure Functions deployments, validates function health after deployment, updates the ServiceNow CMDB, and notifies the dev team via Teams.

naftiko: "0.5"
info:
  label: "Azure Functions Serverless Deployment Tracker"
  description: "Tracks Azure Functions deployments, validates function health after deployment, updates the ServiceNow CMDB, and notifies the dev team via Teams."
  tags:
    - engineering
    - azure-functions
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: serverless-ops
      port: 8080
      tools:
        - name: track-function-deployment
          description: "Given a function app name and deployment ID, verify health and update tracking systems."
          inputParameters:
            - name: function_app
              in: body
              type: string
              description: "The Azure Function App name."
            - name: deployment_id
              in: body
              type: string
              description: "The deployment ID."
          steps:
            - name: get-deployment
              type: call
              call: "azure.get-deployment-status"
              with:
                function_app: "{{function_app}}"
                deployment_id: "{{deployment_id}}"
            - name: update-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                ci_name: "azure-func-{{function_app}}"
                attributes:
                  version: "{{get-deployment.properties.version}}"
                  last_deployed: "{{get-deployment.properties.end_time}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering-deployments"
                message: "Azure Function {{function_app}} deployed. Status: {{get-deployment.properties.status}}. Version: {{get-deployment.properties.version}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: deployments
          path: "/subscriptions/{{sub_id}}/resourceGroups/hilton-functions/providers/Microsoft.Web/sites/{{function_app}}/deployments/{{deployment_id}}"
          inputParameters:
            - name: function_app
              in: path
            - name: deployment_id
              in: path
          operations:
            - name: get-deployment-status
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci"
          operations:
            - name: update-ci
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Responds to AKS pod scaling events by logging the event in Datadog, updating the ServiceNow CMDB, and notifying the platform engineering team via Teams.

naftiko: "0.5"
info:
  label: "Azure Kubernetes Pod Scaling Event Handler"
  description: "Responds to AKS pod scaling events by logging the event in Datadog, updating the ServiceNow CMDB, and notifying the platform engineering team via Teams."
  tags:
    - infrastructure
    - azure-kubernetes-service
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: platform-engineering
      port: 8080
      tools:
        - name: handle-scaling-event
          description: "Given AKS cluster and namespace details, process a scaling event across monitoring and ITSM systems."
          inputParameters:
            - name: cluster_name
              in: body
              type: string
              description: "The AKS cluster name."
            - name: namespace
              in: body
              type: string
              description: "The Kubernetes namespace."
            - name: deployment
              in: body
              type: string
              description: "The deployment name that scaled."
            - name: new_replicas
              in: body
              type: string
              description: "The new replica count."
          steps:
            - name: log-event
              type: call
              call: "datadog.create-event"
              with:
                title: "AKS Scaling: {{deployment}} in {{cluster_name}}/{{namespace}}"
                text: "Scaled to {{new_replicas}} replicas"
                tags: "cluster:{{cluster_name}},namespace:{{namespace}}"
            - name: update-cmdb
              type: call
              call: "servicenow.update-ci"
              with:
                ci_name: "{{cluster_name}}-{{namespace}}-{{deployment}}"
                attributes:
                  replica_count: "{{new_replicas}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "platform-engineering"
                message: "AKS scaling event: {{deployment}} in {{cluster_name}}/{{namespace}} scaled to {{new_replicas}} replicas."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci"
          operations:
            - name: update-ci
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Azure Log Analytics for security events including failed login attempts, privilege escalations, and unusual access patterns across Hilton's cloud infrastructure.

naftiko: "0.5"
info:
  label: "Azure Log Analytics Security Event Query"
  description: "Queries Azure Log Analytics for security events including failed login attempts, privilege escalations, and unusual access patterns across Hilton's cloud infrastructure."
  tags:
    - security
    - azure-log-analytics
    - compliance
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: security-monitoring
      port: 8080
      tools:
        - name: query-security-events
          description: "Given a KQL query and time range, retrieve security events from Azure Log Analytics."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Log Analytics workspace ID."
            - name: time_range
              in: body
              type: string
              description: "Time range: 1h, 12h, 24h, 7d."
          call: "loganalytics.run-query"
          with:
            workspace_id: "{{workspace_id}}"
            timespan: "{{time_range}}"
          outputParameters:
            - name: event_count
              type: string
              mapping: "$.tables[0].rows.length"
            - name: critical_events
              type: string
              mapping: "$.tables[0].rows"
  consumes:
    - type: http
      namespace: loganalytics
      baseUri: "https://api.loganalytics.io/v1"
      authentication:
        type: bearer
        token: "$secrets.azure_loganalytics_token"
      resources:
        - name: query
          path: "/workspaces/{{workspace_id}}/query"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: run-query
              method: POST

Triggers an Azure Machine Learning pipeline to generate demand forecasts for hotel properties, stores results in Power BI, and notifies revenue management via Teams.

naftiko: "0.5"
info:
  label: "Azure Machine Learning Demand Forecast"
  description: "Triggers an Azure Machine Learning pipeline to generate demand forecasts for hotel properties, stores results in Power BI, and notifies revenue management via Teams."
  tags:
    - data-science
    - azure-machine-learning
    - power-bi
    - microsoft-teams
    - revenue-management
capability:
  exposes:
    - type: mcp
      namespace: revenue-intelligence
      port: 8080
      tools:
        - name: run-demand-forecast
          description: "Given a region and forecast horizon, trigger the ML demand forecast pipeline."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "Target region: americas, emea, apac."
            - name: horizon_days
              in: body
              type: string
              description: "Forecast horizon in days."
          steps:
            - name: trigger-pipeline
              type: call
              call: "azureml.submit-pipeline-run"
              with:
                pipeline_id: "demand-forecast-v3"
                parameters:
                  region: "{{region}}"
                  horizon: "{{horizon_days}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "demand-forecast-{{region}}"
            - name: notify-revenue
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "revenue-management"
                message: "Demand forecast initiated for {{region}}, {{horizon_days}}-day horizon. Pipeline run: {{trigger-pipeline.run_id}}. Dashboard refreshing."
  consumes:
    - type: http
      namespace: azureml
      baseUri: "https://hilton-ml.api.azureml.ms"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: pipelines
          path: "/pipelines/{{pipeline_id}}/submit"
          inputParameters:
            - name: pipeline_id
              in: path
          operations:
            - name: submit-pipeline-run
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a Terraform Cloud workspace run to provision Azure infrastructure for hotel system environments, then posts the run status to the platform engineering Teams channel.

naftiko: "0.5"
info:
  label: "Azure Terraform Infrastructure Provisioning"
  description: "Triggers a Terraform Cloud workspace run to provision Azure infrastructure for hotel system environments, then posts the run status to the platform engineering Teams channel."
  tags:
    - cloud
    - infrastructure
    - azure
    - terraform
    - devops
capability:
  exposes:
    - type: mcp
      namespace: platform-engineering
      port: 8080
      tools:
        - name: run-terraform-workspace
          description: "Given a Terraform Cloud workspace ID and run message, trigger a plan-and-apply run for Hilton's Azure infrastructure and notify the platform engineering channel in Teams."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Terraform Cloud workspace ID for the Azure environment to provision."
            - name: run_message
              in: body
              type: string
              description: "Description of the infrastructure change being applied."
          steps:
            - name: trigger-run
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{workspace_id}}"
                message: "{{run_message}}"
            - name: notify-platform
              type: call
              call: "msteams-platform.post-channel-message"
              with:
                channel_id: "$secrets.teams_platform_channel_id"
                message: "Terraform run triggered | Workspace: {{workspace_id}} | Change: {{run_message}} | Run ID: {{trigger-run.run_id}}"
  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: create-run
              method: POST
    - type: http
      namespace: msteams-platform
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves vendor contract documents from Box by contract ID or vendor name, returning file metadata, expiration dates, and download links.

naftiko: "0.5"
info:
  label: "Box Contract Document Retrieval"
  description: "Retrieves vendor contract documents from Box by contract ID or vendor name, returning file metadata, expiration dates, and download links."
  tags:
    - legal
    - box
    - document-management
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: contract-management
      port: 8080
      tools:
        - name: get-contract-document
          description: "Given a vendor name or contract ID, retrieve contract documents from Box."
          inputParameters:
            - name: search_term
              in: body
              type: string
              description: "Vendor name or contract ID to search for."
          call: "box.search-files"
          with:
            query: "{{search_term}}"
            ancestor_folder_ids: "vendor-contracts"
          outputParameters:
            - name: file_name
              type: string
              mapping: "$.entries[0].name"
            - name: download_url
              type: string
              mapping: "$.entries[0].shared_link.download_url"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search-files
              method: GET

Synchronizes approved brand templates from Canva to SharePoint for property marketing teams, ensuring consistent brand materials across all Hilton properties.

naftiko: "0.5"
info:
  label: "Canva Brand Template Library Sync"
  description: "Synchronizes approved brand templates from Canva to SharePoint for property marketing teams, ensuring consistent brand materials across all Hilton properties."
  tags:
    - marketing
    - canva
    - sharepoint
    - brand-management
capability:
  exposes:
    - type: mcp
      namespace: brand-assets
      port: 8080
      tools:
        - name: sync-brand-templates
          description: "Given a Canva folder ID, sync approved templates to the SharePoint brand library."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "The Canva brand folder ID."
            - name: brand
              in: body
              type: string
              description: "The Hilton brand name for categorization."
          steps:
            - name: get-designs
              type: call
              call: "canva.list-designs"
              with:
                folder_id: "{{folder_id}}"
            - name: upload-to-sharepoint
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "hilton-brand-assets"
                folder_path: "Templates/{{brand}}"
                file_content: "{{get-designs.items}}"
            - name: notify-marketing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "brand-{{brand}}-marketing"
                message: "Brand templates synced: {{get-designs.total_count}} templates updated in SharePoint for {{brand}}. Library: {{upload-to-sharepoint.webUrl}}"
  consumes:
    - type: http
      namespace: canva
      baseUri: "https://api.canva.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.canva_token"
      resources:
        - name: designs
          path: "/folders/{{folder_id}}/items"
          inputParameters:
            - name: folder_id
              in: path
          operations:
            - name: list-designs
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive
          path: "/sites/{{site_id}}/drive/root:/{{folder_path}}:/children"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors Cisco wireless controller for guest WiFi network performance at hotel properties, checking connected clients, bandwidth utilization, and access point health.

naftiko: "0.5"
info:
  label: "Cisco WiFi Guest Network Monitor"
  description: "Monitors Cisco wireless controller for guest WiFi network performance at hotel properties, checking connected clients, bandwidth utilization, and access point health."
  tags:
    - infrastructure
    - cisco
    - monitoring
    - hospitality
    - networking
capability:
  exposes:
    - type: mcp
      namespace: network-ops
      port: 8080
      tools:
        - name: monitor-guest-wifi
          description: "Given a property code, retrieve guest WiFi network metrics from Cisco wireless controller."
          inputParameters:
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code."
          call: "cisco.get-network-summary"
          with:
            network_name: "HiltonGuest-{{property_code}}"
          outputParameters:
            - name: connected_clients
              type: string
              mapping: "$.summary.client_count"
            - name: bandwidth_utilization
              type: string
              mapping: "$.summary.bandwidth_pct"
  consumes:
    - type: http
      namespace: cisco
      baseUri: "https://hilton-cisco.meraki.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.cisco_meraki_key"
      resources:
        - name: networks
          path: "/networks/{{network_name}}/clients"
          inputParameters:
            - name: network_name
              in: path
          operations:
            - name: get-network-summary
              method: GET

When a DDoS attack is detected by Cloudflare, enables under-attack mode, creates a ServiceNow P1 incident, and alerts the security operations team via Teams.

naftiko: "0.5"
info:
  label: "Cloudflare DDoS Mitigation Responder"
  description: "When a DDoS attack is detected by Cloudflare, enables under-attack mode, creates a ServiceNow P1 incident, and alerts the security operations team via Teams."
  tags:
    - security
    - cloudflare
    - servicenow
    - microsoft-teams
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: security-ops
      port: 8080
      tools:
        - name: respond-to-ddos
          description: "Given a Cloudflare zone ID and attack details, enable mitigation mode, create incident, and alert security."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The Cloudflare zone ID under attack."
            - name: attack_type
              in: body
              type: string
              description: "Type of DDoS attack detected."
          steps:
            - name: enable-uam
              type: call
              call: "cloudflare.update-security-level"
              with:
                zone_id: "{{zone_id}}"
                value: "under_attack"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "DDoS attack detected: {{attack_type}} on zone {{zone_id}}"
                category: "security_incident"
                urgency: "1"
                impact: "1"
                assigned_to: "Security_Operations"
            - name: alert-secops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "security-operations"
                message: "CRITICAL: DDoS attack ({{attack_type}}) detected on zone {{zone_id}}. Under-attack mode enabled. P1 incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: zone-settings
          path: "/zones/{{zone_id}}/settings/security_level"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: update-security-level
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When brand standards documents are updated in Confluence, sends a Teams notification to affected property GMs and creates a SharePoint tracking entry for acknowledgment.

naftiko: "0.5"
info:
  label: "Confluence Brand Standards Update Notifier"
  description: "When brand standards documents are updated in Confluence, sends a Teams notification to affected property GMs and creates a SharePoint tracking entry for acknowledgment."
  tags:
    - operations
    - confluence
    - microsoft-teams
    - sharepoint
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: brand-operations
      port: 8080
      tools:
        - name: notify-brand-update
          description: "Given a Confluence page ID for an updated brand standard, notify relevant property teams and track acknowledgments."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The Confluence page ID of the updated brand standard."
            - name: brand
              in: body
              type: string
              description: "The Hilton brand name, e.g. Hampton, DoubleTree."
          steps:
            - name: get-page
              type: call
              call: "confluence.get-page"
              with:
                page_id: "{{page_id}}"
            - name: notify-teams
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "brand-{{brand}}-operations"
                message: "Brand standards updated: {{get-page.title}}. Please review and acknowledge. Link: {{get-page._links.webui}}"
            - name: create-tracker
              type: call
              call: "sharepoint.create-item"
              with:
                site_id: "hilton-brand-standards"
                list_name: "AcknowledgmentTracker"
                fields:
                  page_title: "{{get-page.title}}"
                  brand: "{{brand}}"
                  status: "pending"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://hilton.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/sites/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: create-item
              method: POST

Queries Datadog for application latency metrics across Hilton's booking and loyalty platforms, returning p50, p95, and p99 latency values for a specified time window.

naftiko: "0.5"
info:
  label: "Datadog Application Latency Check"
  description: "Queries Datadog for application latency metrics across Hilton's booking and loyalty platforms, returning p50, p95, and p99 latency values for a specified time window."
  tags:
    - monitoring
    - datadog
    - infrastructure
    - performance
capability:
  exposes:
    - type: mcp
      namespace: platform-monitoring
      port: 8080
      tools:
        - name: check-app-latency
          description: "Given a service name and time window, retrieve latency percentiles from Datadog."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name, e.g. hilton-booking-api."
            - name: time_window
              in: body
              type: string
              description: "Time window such as 1h, 6h, 24h."
          call: "datadog.query-metrics"
          with:
            query: "avg:trace.http.request.duration{service:{{service_name}}} by {percentile}"
            from: "{{time_window}}"
          outputParameters:
            - name: p50_ms
              type: string
              mapping: "$.series[0].pointlist[-1][1]"
            - name: p99_ms
              type: string
              mapping: "$.series[2].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          operations:
            - name: query-metrics
              method: GET

When a Datadog monitor alert fires for hotel systems (PMS, Wi-Fi, payment terminals), creates a ServiceNow incident and alerts the IT operations Teams channel with severity and affected property details.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Alert Handler"
  description: "When a Datadog monitor alert fires for hotel systems (PMS, Wi-Fi, payment terminals), creates a ServiceNow incident and alerts the IT operations Teams channel with severity and affected property details."
  tags:
    - itsm
    - observability
    - datadog
    - servicenow
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: infra-ops
      port: 8080
      tools:
        - name: handle-infra-alert
          description: "Given a Datadog monitor ID, alert title, affected property, and severity, create a ServiceNow incident and notify the IT operations Teams channel. Use when Datadog detects a hotel system failure or degradation."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID that triggered the alert."
            - name: alert_title
              in: body
              type: string
              description: "Human-readable alert title from Datadog."
            - name: property_code
              in: body
              type: string
              description: "The affected hotel property code."
            - name: severity
              in: body
              type: string
              description: "Alert severity: P1, P2, or P3."
          steps:
            - name: create-incident
              type: call
              call: "servicenow-infra.create-incident"
              with:
                short_description: "[{{severity}}] {{alert_title}} at property {{property_code}}"
                urgency: "1"
                category: "infrastructure"
            - name: notify-it-ops
              type: call
              call: "msteams-infra.post-channel-message"
              with:
                channel_id: "$secrets.teams_it_ops_channel_id"
                message: "ALERT {{severity}}: {{alert_title}} | Property: {{property_code}} | Monitor: {{monitor_id}} | Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow-infra
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-infra
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Mutes Datadog monitors for a hotel system during a scheduled maintenance window and posts the mute schedule to the IT operations Teams channel for on-call visibility.

naftiko: "0.5"
info:
  label: "Datadog Monitor Mute During Maintenance"
  description: "Mutes Datadog monitors for a hotel system during a scheduled maintenance window and posts the mute schedule to the IT operations Teams channel for on-call visibility."
  tags:
    - observability
    - maintenance
    - datadog
    - microsoft-teams
    - itsm
capability:
  exposes:
    - type: mcp
      namespace: maintenance-ops
      port: 8080
      tools:
        - name: mute-monitors-for-maintenance
          description: "Given a Datadog monitor ID, mute duration, and maintenance reason, suppress the monitor and notify the IT operations channel in Teams. Use before planned hotel system maintenance or infrastructure upgrades."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID to mute."
            - name: duration_seconds
              in: body
              type: integer
              description: "Duration of the mute in seconds."
            - name: maintenance_reason
              in: body
              type: string
              description: "Description of the maintenance activity."
          steps:
            - name: mute-monitor
              type: call
              call: "datadog-mute.mute-monitor"
              with:
                monitor_id: "{{monitor_id}}"
                duration: "{{duration_seconds}}"
            - name: notify-it-ops
              type: call
              call: "msteams-maint.post-channel-message"
              with:
                channel_id: "$secrets.teams_it_ops_channel_id"
                message: "Monitor muted | ID: {{monitor_id}} | Duration: {{duration_seconds}}s | Reason: {{maintenance_reason}} | Alerts suppressed during maintenance."
  consumes:
    - type: http
      namespace: datadog-mute
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitor-mute
          path: "/monitor/{{monitor_id}}/mute"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: mute-monitor
              method: POST
    - type: http
      namespace: msteams-maint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves SLO compliance data from Datadog for hotel system services (booking engine, PMS, loyalty platform) and publishes a weekly digest to the engineering leadership Teams channel.

naftiko: "0.5"
info:
  label: "Datadog SLO Compliance Report"
  description: "Retrieves SLO compliance data from Datadog for hotel system services (booking engine, PMS, loyalty platform) and publishes a weekly digest to the engineering leadership Teams channel."
  tags:
    - observability
    - slo
    - datadog
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: observability-reporting
      port: 8080
      tools:
        - name: digest-slo-compliance
          description: "Given a Datadog SLO ID and time window, retrieve compliance percentage and error budget remaining, then post a summary to the engineering leadership channel in Teams."
          inputParameters:
            - name: slo_id
              in: body
              type: string
              description: "The Datadog SLO ID to check, e.g. for the booking engine or PMS."
            - name: time_window
              in: body
              type: string
              description: "The SLO rolling window, e.g. 7d or 30d."
          steps:
            - name: get-slo-history
              type: call
              call: "datadog.get-slo-history"
              with:
                slo_id: "{{slo_id}}"
            - name: post-digest
              type: call
              call: "msteams-slo.post-channel-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                message: "SLO Compliance Report | SLO: {{slo_id}} | Window: {{time_window}} | Compliance and error budget data retrieved from Datadog."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slo-history
          path: "/slo/{{slo_id}}/history"
          inputParameters:
            - name: slo_id
              in: path
          operations:
            - name: get-slo-history
              method: GET
    - type: http
      namespace: msteams-slo
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves real user monitoring data from Dynatrace for Hilton's mobile app and website, returning page load times, crash rates, and user satisfaction scores.

naftiko: "0.5"
info:
  label: "Dynatrace Real User Monitoring Report"
  description: "Retrieves real user monitoring data from Dynatrace for Hilton's mobile app and website, returning page load times, crash rates, and user satisfaction scores."
  tags:
    - monitoring
    - dynatrace
    - performance
    - digital-experience
capability:
  exposes:
    - type: mcp
      namespace: digital-experience
      port: 8080
      tools:
        - name: get-rum-report
          description: "Given an application name, retrieve RUM metrics from Dynatrace."
          inputParameters:
            - name: application_name
              in: body
              type: string
              description: "The Dynatrace application name, e.g. hilton-mobile-app."
          call: "dynatrace.get-rum-metrics"
          with:
            application_name: "{{application_name}}"
          outputParameters:
            - name: apdex_score
              type: string
              mapping: "$.result[0].data[0].values[0]"
            - name: avg_load_time_ms
              type: string
              mapping: "$.result[1].data[0].values[0]"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://hilton.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: metrics
          path: "/metrics/query"
          operations:
            - name: get-rum-metrics
              method: GET

When a hotel associate's termination is confirmed in Workday, creates a ServiceNow offboarding ticket for access revocation, archives their SharePoint files, and notifies the property IT lead via Teams.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "When a hotel associate's termination is confirmed in Workday, creates a ServiceNow offboarding ticket for access revocation, archives their SharePoint files, and notifies the property IT lead via Teams."
  tags:
    - hr
    - offboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and termination date, open a ServiceNow access-revocation ticket, archive their SharePoint folder, and notify the property IT lead in Teams."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the departing associate."
            - name: termination_date
              in: body
              type: string
              description: "The associate's last working day in YYYY-MM-DD format."
            - name: property_code
              in: body
              type: string
              description: "The property code where the associate was based."
          steps:
            - name: get-worker
              type: call
              call: "workday-off.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-offboarding-ticket
              type: call
              call: "servicenow-off.create-incident"
              with:
                short_description: "Offboarding: {{get-worker.display_name}} from {{property_code}}"
                category: "hr_offboarding"
                description: "{{get-worker.display_name}} ({{employee_id}}) terminates {{termination_date}} at {{property_code}}. Revoke all system access."
            - name: notify-property-it
              type: call
              call: "msteams-off.post-channel-message"
              with:
                channel_id: "$secrets.teams_it_ops_channel_id"
                message: "Offboarding initiated | Associate: {{get-worker.display_name}} | Property: {{property_code}} | Last day: {{termination_date}} | Ticket: {{create-offboarding-ticket.number}}"
  consumes:
    - type: http
      namespace: workday-off
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/hilton/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow-off
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-off
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks F5 load balancer virtual server and pool member health status, identifying degraded or offline members for the booking and loyalty platforms.

naftiko: "0.5"
info:
  label: "F5 Load Balancer Pool Status Check"
  description: "Checks F5 load balancer virtual server and pool member health status, identifying degraded or offline members for the booking and loyalty platforms."
  tags:
    - infrastructure
    - f5-networks
    - monitoring
    - networking
capability:
  exposes:
    - type: mcp
      namespace: network-infrastructure
      port: 8080
      tools:
        - name: check-pool-status
          description: "Given an F5 pool name, retrieve member health status."
          inputParameters:
            - name: pool_name
              in: body
              type: string
              description: "The F5 pool name."
          call: "f5.get-pool-members"
          with:
            pool_name: "{{pool_name}}"
          outputParameters:
            - name: total_members
              type: string
              mapping: "$.items.length"
            - name: active_members
              type: string
              mapping: "$.active_count"
  consumes:
    - type: http
      namespace: f5
      baseUri: "https://hilton-f5.com/mgmt/tm"
      authentication:
        type: basic
        username: "$secrets.f5_user"
        password: "$secrets.f5_password"
      resources:
        - name: pools
          path: "/ltm/pool/{{pool_name}}/members"
          inputParameters:
            - name: pool_name
              in: path
          operations:
            - name: get-pool-members
              method: GET

Retrieves Facebook ad campaign performance metrics including impressions, clicks, conversions, and cost per acquisition for Hilton brand campaigns.

naftiko: "0.5"
info:
  label: "Facebook Ad Campaign Performance Tracker"
  description: "Retrieves Facebook ad campaign performance metrics including impressions, clicks, conversions, and cost per acquisition for Hilton brand campaigns."
  tags:
    - marketing
    - facebook
    - advertising
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: paid-media
      port: 8080
      tools:
        - name: get-campaign-performance
          description: "Given a Facebook ad account ID and campaign ID, retrieve performance metrics."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Facebook ad account ID."
            - name: campaign_id
              in: body
              type: string
              description: "The campaign ID."
          call: "facebook.get-campaign-insights"
          with:
            account_id: "{{account_id}}"
            campaign_id: "{{campaign_id}}"
          outputParameters:
            - name: impressions
              type: string
              mapping: "$.data[0].impressions"
            - name: clicks
              type: string
              mapping: "$.data[0].clicks"
            - name: cost_per_result
              type: string
              mapping: "$.data[0].cost_per_action_type[0].value"
  consumes:
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: insights
          path: "/{{campaign_id}}/insights"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-insights
              method: GET

When a GitHub Actions workflow fails on main branch, creates a ServiceNow incident, posts to the engineering Teams channel, and assigns the on-call developer from the Datadog rotation.

naftiko: "0.5"
info:
  label: "GitHub Actions Build Failure Escalation"
  description: "When a GitHub Actions workflow fails on main branch, creates a ServiceNow incident, posts to the engineering Teams channel, and assigns the on-call developer from the Datadog rotation."
  tags:
    - engineering
    - github-actions
    - servicenow
    - microsoft-teams
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: cicd-operations
      port: 8080
      tools:
        - name: escalate-build-failure
          description: "Given a GitHub repository and workflow run ID, escalate the build failure across ServiceNow, Teams, and on-call rotation."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "The GitHub repository in org/repo format."
            - name: run_id
              in: body
              type: string
              description: "The failed workflow run ID."
          steps:
            - name: get-run
              type: call
              call: "github.get-workflow-run"
              with:
                repo: "{{repo}}"
                run_id: "{{run_id}}"
            - name: get-oncall
              type: call
              call: "datadog.get-oncall"
              with:
                schedule_id: "engineering-primary"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Build failure: {{repo}} workflow {{get-run.name}}"
                category: "software_engineering"
                assigned_to: "{{get-oncall.user.email}}"
                urgency: "2"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering-alerts"
                message: "Build failure in {{repo}}: {{get-run.name}} ({{get-run.conclusion}}). On-call: {{get-oncall.user.name}}. Incident: {{create-incident.number}}. Run: {{get-run.html_url}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repo}}/actions/runs/{{run_id}}"
          inputParameters:
            - name: repo
              in: path
            - name: run_id
              in: path
          operations:
            - name: get-workflow-run
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
      resources:
        - name: oncall
          path: "/on-call/schedules/{{schedule_id}}/oncall"
          inputParameters:
            - name: schedule_id
              in: path
          operations:
            - name: get-oncall
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors GitLab merge request pipelines for code quality gate results, blocks merges on failures, and notifies the engineering lead via Teams with quality metrics.

naftiko: "0.5"
info:
  label: "GitLab Code Quality Gate Enforcer"
  description: "Monitors GitLab merge request pipelines for code quality gate results, blocks merges on failures, and notifies the engineering lead via Teams with quality metrics."
  tags:
    - engineering
    - gitlab
    - microsoft-teams
    - quality-assurance
capability:
  exposes:
    - type: mcp
      namespace: code-quality
      port: 8080
      tools:
        - name: enforce-quality-gate
          description: "Given a GitLab project and merge request IID, check quality gates and notify the team."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "The GitLab project ID."
            - name: mr_iid
              in: body
              type: string
              description: "The merge request IID."
          steps:
            - name: get-pipeline
              type: call
              call: "gitlab.get-mr-pipelines"
              with:
                project_id: "{{project_id}}"
                mr_iid: "{{mr_iid}}"
            - name: get-quality
              type: call
              call: "gitlab.get-code-quality"
              with:
                project_id: "{{project_id}}"
                pipeline_id: "{{get-pipeline[0].id}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering-quality"
                message: "Quality gate result for MR !{{mr_iid}}: Pipeline {{get-pipeline[0].status}}. Quality issues: {{get-quality.length}}. Blocking: {{get-quality.blocker_count}}"
  consumes:
    - type: http
      namespace: gitlab
      baseUri: "https://gitlab.hilton.com/api/v4"
      authentication:
        type: bearer
        token: "$secrets.gitlab_token"
      resources:
        - name: merge-requests
          path: "/projects/{{project_id}}/merge_requests/{{mr_iid}}/pipelines"
          inputParameters:
            - name: project_id
              in: path
            - name: mr_iid
              in: path
          operations:
            - name: get-mr-pipelines
              method: GET
        - name: quality
          path: "/projects/{{project_id}}/pipelines/{{pipeline_id}}/codequality_reports"
          inputParameters:
            - name: project_id
              in: path
            - name: pipeline_id
              in: path
          operations:
            - name: get-code-quality
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls weekly website traffic metrics from Google Analytics for Hilton brand sites, including sessions, bounce rate, and conversion rate, then sends a summary to a Teams channel.

naftiko: "0.5"
info:
  label: "Google Analytics Website Traffic Digest"
  description: "Pulls weekly website traffic metrics from Google Analytics for Hilton brand sites, including sessions, bounce rate, and conversion rate, then sends a summary to a Teams channel."
  tags:
    - marketing
    - google-analytics
    - microsoft-teams
    - reporting
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: digital-marketing
      port: 8080
      tools:
        - name: generate-traffic-digest
          description: "Given a brand site identifier, pull weekly traffic metrics from Google Analytics and post a summary to the marketing Teams channel."
          inputParameters:
            - name: property_id
              in: body
              type: string
              description: "The Google Analytics property ID for the brand site."
          steps:
            - name: get-traffic
              type: call
              call: "google-analytics.get-report"
              with:
                property_id: "{{property_id}}"
                date_range: "last_7_days"
                metrics: "sessions,bounceRate,goalConversionRate"
            - name: post-digest
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "digital-marketing-team"
                message: "Weekly Traffic Digest: Sessions: {{get-traffic.sessions}}, Bounce Rate: {{get-traffic.bounceRate}}%, Conversion: {{get-traffic.goalConversionRate}}%"
  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: get-report
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves franchise agreement documents and operational templates from Google Drive shared folders for franchise property owners.

naftiko: "0.5"
info:
  label: "Google Drive Franchise Document Library"
  description: "Retrieves franchise agreement documents and operational templates from Google Drive shared folders for franchise property owners."
  tags:
    - operations
    - google-drive
    - franchise
    - document-management
capability:
  exposes:
    - type: mcp
      namespace: franchise-ops
      port: 8080
      tools:
        - name: get-franchise-documents
          description: "Given a franchise ID, retrieve associated documents from Google Drive."
          inputParameters:
            - name: franchise_id
              in: body
              type: string
              description: "The franchise property identifier."
          call: "google-drive.list-files"
          with:
            folder_id: "franchise-{{franchise_id}}"
            fields: "files(id,name,mimeType,modifiedTime)"
          outputParameters:
            - name: document_count
              type: string
              mapping: "$.files.length"
            - name: latest_document
              type: string
              mapping: "$.files[0].name"
  consumes:
    - type: http
      namespace: google-drive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: list-files
              method: GET

Retrieves guest feedback responses from Google Forms, aggregates scores, and syncs results to Salesforce for guest experience tracking.

naftiko: "0.5"
info:
  label: "Google Forms Guest Feedback Collector"
  description: "Retrieves guest feedback responses from Google Forms, aggregates scores, and syncs results to Salesforce for guest experience tracking."
  tags:
    - guest-experience
    - google-forms
    - salesforce
    - feedback
capability:
  exposes:
    - type: mcp
      namespace: guest-feedback
      port: 8080
      tools:
        - name: collect-feedback
          description: "Given a Google Forms form ID, retrieve responses and sync to Salesforce."
          inputParameters:
            - name: form_id
              in: body
              type: string
              description: "The Google Forms form ID."
          steps:
            - name: get-responses
              type: call
              call: "google-forms.get-responses"
              with:
                form_id: "{{form_id}}"
            - name: sync-to-salesforce
              type: call
              call: "salesforce.create-records"
              with:
                object: "Guest_Feedback__c"
                records: "{{get-responses.responses}}"
  consumes:
    - type: http
      namespace: google-forms
      baseUri: "https://forms.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_forms_token"
      resources:
        - name: responses
          path: "/forms/{{form_id}}/responses"
          inputParameters:
            - name: form_id
              in: path
          operations:
            - name: get-responses
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: composite
          path: "/composite/sobjects"
          operations:
            - name: create-records
              method: POST

Retrieves Google Maps business listing data for a Hilton property, checking accuracy of address, phone, hours, and ratings against the master property database.

naftiko: "0.5"
info:
  label: "Google Maps Property Listing Audit"
  description: "Retrieves Google Maps business listing data for a Hilton property, checking accuracy of address, phone, hours, and ratings against the master property database."
  tags:
    - marketing
    - google-maps
    - hospitality
    - operations
capability:
  exposes:
    - type: mcp
      namespace: property-marketing
      port: 8080
      tools:
        - name: audit-property-listing
          description: "Given a Google Place ID, retrieve the business listing details for auditing."
          inputParameters:
            - name: place_id
              in: body
              type: string
              description: "The Google Maps Place ID for the property."
          call: "google-maps.get-place-details"
          with:
            place_id: "{{place_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.result.name"
            - name: rating
              type: string
              mapping: "$.result.rating"
            - name: total_reviews
              type: string
              mapping: "$.result.user_ratings_total"
  consumes:
    - type: http
      namespace: google-maps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apiKey
        key: "$secrets.google_maps_api_key"
      resources:
        - name: places
          path: "/place/details/json"
          operations:
            - name: get-place-details
              method: GET

Retrieves search performance data from Google Search Console for Hilton's web properties, including click-through rates, average position, and top queries.

naftiko: "0.5"
info:
  label: "Google Search Console SEO Report"
  description: "Retrieves search performance data from Google Search Console for Hilton's web properties, including click-through rates, average position, and top queries."
  tags:
    - marketing
    - google-search-console
    - seo
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: seo-analytics
      port: 8080
      tools:
        - name: get-seo-report
          description: "Given a site URL and date range, retrieve search performance metrics from Google Search Console."
          inputParameters:
            - name: site_url
              in: body
              type: string
              description: "The site URL registered in Search Console."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "searchconsole.query-analytics"
          with:
            site_url: "{{site_url}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: total_clicks
              type: string
              mapping: "$.rows[0].clicks"
            - name: avg_ctr
              type: string
              mapping: "$.rows[0].ctr"
            - name: avg_position
              type: string
              mapping: "$.rows[0].position"
  consumes:
    - type: http
      namespace: searchconsole
      baseUri: "https://searchconsole.googleapis.com/webmasters/v3"
      authentication:
        type: bearer
        token: "$secrets.google_searchconsole_token"
      resources:
        - name: analytics
          path: "/sites/{{site_url}}/searchAnalytics/query"
          inputParameters:
            - name: site_url
              in: path
          operations:
            - name: query-analytics
              method: POST

Retrieves property budget vs. actual data from Google Sheets for GM review, flagging variances exceeding thresholds.

naftiko: "0.5"
info:
  label: "Google Sheets Property Budget Tracker"
  description: "Retrieves property budget vs. actual data from Google Sheets for GM review, flagging variances exceeding thresholds."
  tags:
    - finance
    - google-sheets
    - reporting
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: property-finance
      port: 8080
      tools:
        - name: get-budget-status
          description: "Given a Google Sheets spreadsheet ID, retrieve budget vs. actual data."
          inputParameters:
            - name: spreadsheet_id
              in: body
              type: string
              description: "The Google Sheets spreadsheet ID."
            - name: sheet_name
              in: body
              type: string
              description: "The sheet tab name."
          call: "google-sheets.get-values"
          with:
            spreadsheet_id: "{{spreadsheet_id}}"
            range: "{{sheet_name}}!A1:Z100"
          outputParameters:
            - name: values
              type: string
              mapping: "$.values"
  consumes:
    - type: http
      namespace: google-sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: get-values
              method: GET

Retrieves the latest published container version from Google Tag Manager for Hilton web properties, checking for recent changes and tag counts.

naftiko: "0.5"
info:
  label: "Google Tag Manager Container Version Check"
  description: "Retrieves the latest published container version from Google Tag Manager for Hilton web properties, checking for recent changes and tag counts."
  tags:
    - marketing
    - google-tag-manager
    - digital-experience
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: tag-management
      port: 8080
      tools:
        - name: check-container-version
          description: "Given a GTM account and container ID, retrieve the latest version details."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The GTM account ID."
            - name: container_id
              in: body
              type: string
              description: "The GTM container ID."
          call: "gtm.get-latest-version"
          with:
            account_id: "{{account_id}}"
            container_id: "{{container_id}}"
          outputParameters:
            - name: version_id
              type: string
              mapping: "$.containerVersion.containerVersionId"
            - name: tag_count
              type: string
              mapping: "$.containerVersion.tag.length"
  consumes:
    - type: http
      namespace: gtm
      baseUri: "https://www.googleapis.com/tagmanager/v2"
      authentication:
        type: bearer
        token: "$secrets.gtm_token"
      resources:
        - name: versions
          path: "/accounts/{{account_id}}/containers/{{container_id}}/versions"
          inputParameters:
            - name: account_id
              in: path
            - name: container_id
              in: path
          operations:
            - name: get-latest-version
              method: GET

Retrieves guest satisfaction survey scores and comments from Salesforce for a specified property and date range, surfacing NPS and key feedback themes for hotel management.

naftiko: "0.5"
info:
  label: "Guest Satisfaction Score Lookup"
  description: "Retrieves guest satisfaction survey scores and comments from Salesforce for a specified property and date range, surfacing NPS and key feedback themes for hotel management."
  tags:
    - customer-success
    - salesforce
    - guest-experience
    - reporting
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: guest-experience
      port: 8080
      tools:
        - name: get-guest-satisfaction-scores
          description: "Given a Hilton property code and date range, retrieve guest satisfaction survey scores and comment summaries from Salesforce. Use for property performance reviews and GM briefings."
          inputParameters:
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code, e.g. NYCHH for New York Conrad."
            - name: start_date
              in: body
              type: string
              description: "Start of the date range in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End of the date range in YYYY-MM-DD format."
          call: "salesforce.query-surveys"
          with:
            property_code: "{{property_code}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: nps_score
              type: string
              mapping: "$.records[0].NPS_Score__c"
            - name: total_responses
              type: string
              mapping: "$.totalSize"
            - name: average_rating
              type: string
              mapping: "$.records[0].Average_Rating__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: survey-query
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-surveys
              method: GET

When a new hotel associate is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint orientation folder, and sends a Teams welcome message with property and start date details.

naftiko: "0.5"
info:
  label: "Hotel Staff Onboarding Orchestrator"
  description: "When a new hotel associate is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint orientation folder, and sends a Teams welcome message with property and start date details."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence by opening a ServiceNow ticket, provisioning a SharePoint folder, and sending a Teams welcome message to the new associate."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hotel associate."
            - name: start_date
              in: body
              type: string
              description: "The associate's start date in YYYY-MM-DD format."
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code where the associate will be based, e.g. NYCHH."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New associate onboarding: {{get-worker.display_name}} at {{property_code}}"
                category: "hr_onboarding"
                assigned_to: "IT_Onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hilton-hr-onboarding"
                folder_path: "OnboardingDocs/{{property_code}}/{{get-worker.display_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-worker.work_email}}"
                message: "Welcome to Hilton, {{get-worker.first_name}}! You're joining {{property_code}} on {{start_date}}. Your onboarding ticket: {{create-ticket.number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/hilton/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{{site_id}}/drive/root/children"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a new lead is captured in HubSpot from digital campaigns, enriches the lead with Salesforce account data, creates a follow-up task, and notifies the regional sales team via Teams.

naftiko: "0.5"
info:
  label: "HubSpot Digital Lead Capture Sync"
  description: "When a new lead is captured in HubSpot from digital campaigns, enriches the lead with Salesforce account data, creates a follow-up task, and notifies the regional sales team via Teams."
  tags:
    - marketing
    - hubspot
    - salesforce
    - microsoft-teams
    - sales
capability:
  exposes:
    - type: mcp
      namespace: lead-management
      port: 8080
      tools:
        - name: sync-digital-lead
          description: "Given a HubSpot contact ID, enrich with Salesforce data, create a follow-up task, and notify regional sales."
          inputParameters:
            - name: contact_id
              in: body
              type: string
              description: "The HubSpot contact ID for the new lead."
            - name: region
              in: body
              type: string
              description: "The sales region, e.g. americas, emea, apac."
          steps:
            - name: get-contact
              type: call
              call: "hubspot.get-contact"
              with:
                contact_id: "{{contact_id}}"
            - name: search-account
              type: call
              call: "salesforce.search-account"
              with:
                email_domain: "{{get-contact.email_domain}}"
            - name: create-task
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Follow up: {{get-contact.firstname}} {{get-contact.lastname}} from {{get-contact.company}}"
                due_date: "+3d"
                priority: "High"
            - name: notify-sales
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "sales-{{region}}"
                message: "New digital lead: {{get-contact.firstname}} {{get-contact.lastname}} at {{get-contact.company}}. Account match: {{search-account.Name}}. Follow-up task created."
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/objects/contacts/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/query"
          operations:
            - name: search-account
              method: GET
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Takes a Workday job requisition and posts it to Indeed, tracks the posting status, and updates the recruiter in Teams with the live listing URL.

naftiko: "0.5"
info:
  label: "Indeed Job Posting Distribution"
  description: "Takes a Workday job requisition and posts it to Indeed, tracks the posting status, and updates the recruiter in Teams with the live listing URL."
  tags:
    - hr
    - indeed
    - workday
    - microsoft-teams
    - recruiting
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: distribute-job-posting
          description: "Given a Workday requisition ID, create an Indeed job posting and notify the recruiter."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: post-job
              type: call
              call: "indeed.create-posting"
              with:
                title: "{{get-requisition.title}}"
                description: "{{get-requisition.description}}"
                location: "{{get-requisition.location}}"
                company: "Hilton"
            - name: notify-recruiter
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-requisition.recruiter_email}}"
                message: "Job posted to Indeed: {{get-requisition.title}} at {{get-requisition.location}}. Listing URL: {{post-job.url}}. Requisition: {{requisition_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/hilton/recruiting/requisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: indeed
      baseUri: "https://apis.indeed.com/v2"
      authentication:
        type: bearer
        token: "$secrets.indeed_token"
      resources:
        - name: postings
          path: "/postings"
          operations:
            - name: create-posting
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chat
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves data quality scores from Informatica for guest master data, identifying duplicate records, missing fields, and data completeness metrics.

naftiko: "0.5"
info:
  label: "Informatica Data Quality Score Report"
  description: "Retrieves data quality scores from Informatica for guest master data, identifying duplicate records, missing fields, and data completeness metrics."
  tags:
    - data-management
    - informatica
    - reporting
    - data-quality
capability:
  exposes:
    - type: mcp
      namespace: data-governance
      port: 8080
      tools:
        - name: get-data-quality-scores
          description: "Given a data domain, retrieve quality scores from Informatica."
          inputParameters:
            - name: domain
              in: body
              type: string
              description: "The data domain: guest, property, reservation."
          call: "informatica.get-quality-report"
          with:
            domain: "{{domain}}"
          outputParameters:
            - name: completeness_score
              type: string
              mapping: "$.report.completeness"
            - name: duplicate_count
              type: string
              mapping: "$.report.duplicates"
  consumes:
    - type: http
      namespace: informatica
      baseUri: "https://hilton.informaticacloud.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.informatica_token"
      resources:
        - name: quality-reports
          path: "/quality/reports"
          operations:
            - name: get-quality-report
              method: GET

Pulls engagement metrics from Instagram Business API for Hilton brand accounts, compiling weekly reach, impressions, and top-performing content into a Teams digest.

naftiko: "0.5"
info:
  label: "Instagram Social Media Engagement Digest"
  description: "Pulls engagement metrics from Instagram Business API for Hilton brand accounts, compiling weekly reach, impressions, and top-performing content into a Teams digest."
  tags:
    - marketing
    - instagram
    - microsoft-teams
    - social-media
capability:
  exposes:
    - type: mcp
      namespace: social-marketing
      port: 8080
      tools:
        - name: generate-instagram-digest
          description: "Given an Instagram business account ID, compile weekly engagement metrics and post to Teams."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Instagram business account ID."
          steps:
            - name: get-insights
              type: call
              call: "instagram.get-account-insights"
              with:
                account_id: "{{account_id}}"
                period: "week"
                metrics: "reach,impressions,profile_views"
            - name: post-digest
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "social-media-marketing"
                message: "Weekly Instagram Digest: Reach: {{get-insights.data[0].values[0].value}}, Impressions: {{get-insights.data[1].values[0].value}}, Profile Views: {{get-insights.data[2].values[0].value}}"
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: insights
          path: "/{{account_id}}/insights"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account-insights
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves engagement metrics for Hilton's LinkedIn employer brand posts and job listings over the past 30 days, posting a digest to the talent acquisition Teams channel.

naftiko: "0.5"
info:
  label: "LinkedIn Hospitality Employer Brand Digest"
  description: "Retrieves engagement metrics for Hilton's LinkedIn employer brand posts and job listings over the past 30 days, posting a digest to the talent acquisition Teams channel."
  tags:
    - marketing
    - hr
    - linkedin
    - employer-brand
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: talent-brand
      port: 8080
      tools:
        - name: digest-linkedin-employer-brand
          description: "Retrieve LinkedIn organization follower stats, post impressions, and job listing performance for Hilton's company page, then post a digest to the talent acquisition channel in Teams."
          inputParameters:
            - name: organization_id
              in: body
              type: string
              description: "Hilton's LinkedIn organization URN ID."
            - name: date_range_days
              in: body
              type: integer
              description: "Number of days to include in the report, e.g. 30."
          steps:
            - name: get-follower-stats
              type: call
              call: "linkedin.get-follower-statistics"
              with:
                organization_id: "{{organization_id}}"
            - name: post-digest
              type: call
              call: "msteams-talent.post-channel-message"
              with:
                channel_id: "$secrets.teams_talent_channel_id"
                message: "LinkedIn Employer Brand Digest | Hilton | Last {{date_range_days}} days | Follower and engagement data retrieved. Review in full on LinkedIn Campaign Manager."
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: follower-statistics
          path: "/organizationalEntityFollowerStatistics"
          inputParameters:
            - name: organization_id
              in: query
          operations:
            - name: get-follower-statistics
              method: GET
    - type: http
      namespace: msteams-talent
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Syncs open positions from Workday to LinkedIn Recruiter job slots, updating pipeline metrics and notifying talent acquisition teams via Teams.

naftiko: "0.5"
info:
  label: "LinkedIn Talent Pipeline Update"
  description: "Syncs open positions from Workday to LinkedIn Recruiter job slots, updating pipeline metrics and notifying talent acquisition teams via Teams."
  tags:
    - hr
    - linkedin
    - workday
    - microsoft-teams
    - recruiting
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: update-linkedin-pipeline
          description: "Given a Workday requisition ID, sync the position to LinkedIn Recruiter and notify the TA team."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
          steps:
            - name: get-requisition
              type: call
              call: "workday.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: post-to-linkedin
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{get-requisition.title}}"
                location: "{{get-requisition.location}}"
                description: "{{get-requisition.description}}"
            - name: notify-ta
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "talent-acquisition"
                message: "LinkedIn job posting synced: {{get-requisition.title}} at {{get-requisition.location}}. LinkedIn posting: {{post-to-linkedin.posting_url}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/hilton/recruiting/requisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/jobPostings"
          operations:
            - name: create-job-posting
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Launches a targeted email campaign in MailChimp for Hilton Honors members, syncing segment data from Salesforce and posting campaign metrics to Teams.

naftiko: "0.5"
info:
  label: "MailChimp Loyalty Campaign Launcher"
  description: "Launches a targeted email campaign in MailChimp for Hilton Honors members, syncing segment data from Salesforce and posting campaign metrics to Teams."
  tags:
    - marketing
    - mailchimp
    - salesforce
    - microsoft-teams
    - loyalty
capability:
  exposes:
    - type: mcp
      namespace: loyalty-marketing
      port: 8080
      tools:
        - name: launch-loyalty-campaign
          description: "Given a Salesforce segment ID and MailChimp template, launch a targeted loyalty campaign and notify marketing."
          inputParameters:
            - name: segment_id
              in: body
              type: string
              description: "The Salesforce Honors member segment ID."
            - name: template_id
              in: body
              type: string
              description: "The MailChimp email template ID."
            - name: campaign_name
              in: body
              type: string
              description: "Name for the campaign."
          steps:
            - name: get-segment
              type: call
              call: "salesforce.get-campaign-members"
              with:
                segment_id: "{{segment_id}}"
            - name: create-campaign
              type: call
              call: "mailchimp.create-campaign"
              with:
                name: "{{campaign_name}}"
                template_id: "{{template_id}}"
                list_id: "honors-members"
                segment_count: "{{get-segment.totalSize}}"
            - name: send-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                campaign_id: "{{create-campaign.id}}"
            - name: notify-marketing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "loyalty-marketing"
                message: "Loyalty campaign '{{campaign_name}}' launched to {{get-segment.totalSize}} Honors members. Campaign ID: {{create-campaign.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/query"
          operations:
            - name: get-campaign-members
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
        - name: campaign-actions
          path: "/campaigns/{{campaign_id}}/actions/send"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: send-campaign
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves impression, reach, and booking conversion metrics from Meta Ads for Hilton's hotel campaigns and posts a weekly performance digest to the digital marketing Teams channel.

naftiko: "0.5"
info:
  label: "Meta Hotel Campaign Performance Digest"
  description: "Retrieves impression, reach, and booking conversion metrics from Meta Ads for Hilton's hotel campaigns and posts a weekly performance digest to the digital marketing Teams channel."
  tags:
    - marketing
    - social
    - meta
    - microsoft-teams
    - digital-marketing
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: digital-marketing
      port: 8080
      tools:
        - name: digest-meta-hotel-campaigns
          description: "Given a Meta ad account ID and date preset, retrieve hotel campaign performance metrics (impressions, clicks, conversions, ROAS) and post a digest to the digital marketing Teams channel."
          inputParameters:
            - name: ad_account_id
              in: body
              type: string
              description: "The Meta ad account ID for Hilton hotel campaigns, e.g. act_987654321."
            - name: date_preset
              in: body
              type: string
              description: "Meta Insights date preset, e.g. last_7d or last_30d."
          steps:
            - name: get-insights
              type: call
              call: "meta.get-ad-insights"
              with:
                ad_account_id: "{{ad_account_id}}"
                date_preset: "{{date_preset}}"
            - name: post-digest
              type: call
              call: "msteams-mktg.post-channel-message"
              with:
                channel_id: "$secrets.teams_digital_marketing_channel_id"
                message: "Meta Hotel Campaign Digest | Account: {{ad_account_id}} | Period: {{date_preset}} | Insights retrieved. Full breakdown available in Ads Manager."
  consumes:
    - type: http
      namespace: meta
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_access_token"
      resources:
        - name: ad-insights
          path: "/{{ad_account_id}}/insights"
          inputParameters:
            - name: ad_account_id
              in: path
            - name: date_preset
              in: query
          operations:
            - name: get-ad-insights
              method: GET
    - type: http
      namespace: msteams-mktg
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks device compliance status in Microsoft Endpoint Manager for corporate devices, identifying non-compliant devices and creating remediation tickets in ServiceNow.

naftiko: "0.5"
info:
  label: "Microsoft Endpoint Manager Device Compliance Check"
  description: "Checks device compliance status in Microsoft Endpoint Manager for corporate devices, identifying non-compliant devices and creating remediation tickets in ServiceNow."
  tags:
    - security
    - microsoft-endpoint-manager
    - servicenow
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: endpoint-security
      port: 8080
      tools:
        - name: check-device-compliance
          description: "Given a device ID, check compliance status and create remediation tickets for violations."
          inputParameters:
            - name: device_id
              in: body
              type: string
              description: "The Intune device ID."
          steps:
            - name: get-compliance
              type: call
              call: "intune.get-device-compliance"
              with:
                device_id: "{{device_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Non-compliant device: {{device_id}} - {{get-compliance.deviceName}}"
                category: "endpoint_security"
                assigned_to: "Endpoint_Security"
            - name: notify-security
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "endpoint-security"
                message: "Device compliance violation: {{get-compliance.deviceName}} ({{device_id}}). Status: {{get-compliance.complianceState}}. Ticket: {{create-ticket.number}}"
  consumes:
    - type: http
      namespace: intune
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: devices
          path: "/deviceManagement/managedDevices/{{device_id}}"
          inputParameters:
            - name: device_id
              in: path
          operations:
            - name: get-device-compliance
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves financial consolidation data from Excel Online workbooks via Microsoft Graph, pulling regional P&L summaries for executive reporting.

naftiko: "0.5"
info:
  label: "Microsoft Excel Financial Consolidation Report"
  description: "Retrieves financial consolidation data from Excel Online workbooks via Microsoft Graph, pulling regional P&L summaries for executive reporting."
  tags:
    - finance
    - microsoft-excel
    - reporting
    - financial-reporting
capability:
  exposes:
    - type: mcp
      namespace: financial-reporting
      port: 8080
      tools:
        - name: get-consolidation-data
          description: "Given an Excel workbook ID and worksheet name, retrieve financial consolidation data."
          inputParameters:
            - name: workbook_id
              in: body
              type: string
              description: "The Excel workbook drive item ID."
            - name: worksheet
              in: body
              type: string
              description: "The worksheet name."
          call: "msgraph.get-range"
          with:
            workbook_id: "{{workbook_id}}"
            worksheet: "{{worksheet}}"
            range: "A1:Z50"
          outputParameters:
            - name: values
              type: string
              mapping: "$.values"
  consumes:
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: workbooks
          path: "/me/drive/items/{{workbook_id}}/workbook/worksheets/{{worksheet}}/range(address='{{range}}')"
          inputParameters:
            - name: workbook_id
              in: path
            - name: worksheet
              in: path
            - name: range
              in: path
          operations:
            - name: get-range
              method: GET

Sends personalized VIP guest arrival notifications via Outlook to property front desk and GM, pulling guest preferences from Salesforce and stay details from the reservation system.

naftiko: "0.5"
info:
  label: "Microsoft Outlook VIP Guest Arrival Notifier"
  description: "Sends personalized VIP guest arrival notifications via Outlook to property front desk and GM, pulling guest preferences from Salesforce and stay details from the reservation system."
  tags:
    - guest-experience
    - microsoft-outlook
    - salesforce
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: vip-services
      port: 8080
      tools:
        - name: notify-vip-arrival
          description: "Given a reservation ID, prepare and send VIP arrival notifications with guest preferences."
          inputParameters:
            - name: reservation_id
              in: body
              type: string
              description: "The reservation confirmation number."
            - name: property_code
              in: body
              type: string
              description: "The hotel property code."
          steps:
            - name: get-reservation
              type: call
              call: "salesforce.get-reservation"
              with:
                reservation_id: "{{reservation_id}}"
            - name: get-preferences
              type: call
              call: "salesforce.get-guest-preferences"
              with:
                guest_id: "{{get-reservation.Guest_ID__c}}"
            - name: send-notification
              type: call
              call: "outlook.send-email"
              with:
                to: "frontdesk-{{property_code}}@hilton.com,gm-{{property_code}}@hilton.com"
                subject: "VIP Arrival Alert: {{get-reservation.Guest_Name__c}} - {{get-reservation.Check_In__c}}"
                body: "VIP guest {{get-reservation.Guest_Name__c}} ({{get-reservation.Honors_Tier__c}}) arriving {{get-reservation.Check_In__c}}. Preferences: {{get-preferences.summary}}. Room: {{get-reservation.Room_Type__c}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: get-reservation
              method: GET
            - name: get-guest-preferences
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/concierge@hilton.com/sendMail"
          operations:
            - name: send-email
              method: POST

Checks the health and run status of Microsoft Power Automate flows used for hotel operations, identifying failed runs and notifying the automation team.

naftiko: "0.5"
info:
  label: "Microsoft Power Automate Workflow Status Checker"
  description: "Checks the health and run status of Microsoft Power Automate flows used for hotel operations, identifying failed runs and notifying the automation team."
  tags:
    - automation
    - microsoft-power-automate
    - microsoft-teams
    - operations
capability:
  exposes:
    - type: mcp
      namespace: automation-ops
      port: 8080
      tools:
        - name: check-flow-status
          description: "Given a Power Automate flow ID, check recent run statuses and alert on failures."
          inputParameters:
            - name: flow_id
              in: body
              type: string
              description: "The Power Automate flow ID."
          steps:
            - name: get-runs
              type: call
              call: "powerautomate.get-flow-runs"
              with:
                flow_id: "{{flow_id}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "automation-ops"
                message: "Flow {{flow_id}} status: Last run {{get-runs.value[0].status}} at {{get-runs.value[0].startTime}}. Failed runs in last 24h: {{get-runs.failed_count}}"
  consumes:
    - type: http
      namespace: powerautomate
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: flow-runs
          path: "/providers/Microsoft.ProcessSimple/environments/Default/flows/{{flow_id}}/runs"
          inputParameters:
            - name: flow_id
              in: path
          operations:
            - name: get-flow-runs
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Books meeting rooms at Hilton corporate offices via Microsoft Graph, checking availability and sending calendar invites with room details.

naftiko: "0.5"
info:
  label: "Microsoft Teams Meeting Room Booking"
  description: "Books meeting rooms at Hilton corporate offices via Microsoft Graph, checking availability and sending calendar invites with room details."
  tags:
    - operations
    - microsoft-teams
    - facilities
    - productivity
capability:
  exposes:
    - type: mcp
      namespace: workplace-services
      port: 8080
      tools:
        - name: book-meeting-room
          description: "Given a location, date, and time, find and book an available meeting room."
          inputParameters:
            - name: building
              in: body
              type: string
              description: "Building name, e.g. McLean-HQ."
            - name: date
              in: body
              type: string
              description: "Meeting date in YYYY-MM-DD format."
            - name: start_time
              in: body
              type: string
              description: "Start time in HH:MM format."
            - name: duration_minutes
              in: body
              type: string
              description: "Meeting duration in minutes."
          steps:
            - name: find-rooms
              type: call
              call: "msgraph.find-meeting-times"
              with:
                building: "{{building}}"
                date: "{{date}}"
                start_time: "{{start_time}}"
                duration: "{{duration_minutes}}"
            - name: create-booking
              type: call
              call: "msgraph.create-event"
              with:
                room_email: "{{find-rooms.meetingTimeSuggestions[0].locations[0].locationEmailAddress}}"
                start: "{{date}}T{{start_time}}:00"
                duration_minutes: "{{duration_minutes}}"
  consumes:
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: calendar
          path: "/me/findMeetingTimes"
          operations:
            - name: find-meeting-times
              method: POST
        - name: events
          path: "/me/events"
          operations:
            - name: create-event
              method: POST

Queries New Relic for application performance metrics including error rate, throughput, and response time for Hilton's digital platforms.

naftiko: "0.5"
info:
  label: "New Relic APM Health Check"
  description: "Queries New Relic for application performance metrics including error rate, throughput, and response time for Hilton's digital platforms."
  tags:
    - monitoring
    - new-relic
    - infrastructure
    - performance
capability:
  exposes:
    - type: mcp
      namespace: apm-monitoring
      port: 8080
      tools:
        - name: check-app-health
          description: "Given a New Relic application ID, retrieve current health metrics."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app-metrics"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: error_rate
              type: string
              mapping: "$.application.application_summary.error_rate"
            - name: throughput
              type: string
              mapping: "$.application.application_summary.throughput"
            - name: response_time
              type: string
              mapping: "$.application.application_summary.response_time"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        key: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app-metrics
              method: GET

Retrieves general ledger account balances from Oracle Cloud ERP for a specified period and cost center, supporting month-end close and financial reporting.

naftiko: "0.5"
info:
  label: "Oracle Cloud ERP GL Balance Lookup"
  description: "Retrieves general ledger account balances from Oracle Cloud ERP for a specified period and cost center, supporting month-end close and financial reporting."
  tags:
    - finance
    - oracle-cloud
    - reporting
    - accounting
capability:
  exposes:
    - type: mcp
      namespace: finance-gl
      port: 8080
      tools:
        - name: get-gl-balance
          description: "Given a GL account, cost center, and period, retrieve the account balance from Oracle Cloud ERP."
          inputParameters:
            - name: account_code
              in: body
              type: string
              description: "The GL account code."
            - name: cost_center
              in: body
              type: string
              description: "The cost center code."
            - name: period
              in: body
              type: string
              description: "The accounting period, e.g. MAR-26."
          call: "oracle-erp.get-balance"
          with:
            account_code: "{{account_code}}"
            cost_center: "{{cost_center}}"
            period: "{{period}}"
          outputParameters:
            - name: debit_balance
              type: string
              mapping: "$.items[0].DebitAmount"
            - name: credit_balance
              type: string
              mapping: "$.items[0].CreditAmount"
            - name: net_balance
              type: string
              mapping: "$.items[0].NetAmount"
  consumes:
    - type: http
      namespace: oracle-erp
      baseUri: "https://hilton-erp.oraclecloud.com/fscmRestApi/resources/v2"
      authentication:
        type: bearer
        token: "$secrets.oracle_erp_token"
      resources:
        - name: gl-balances
          path: "/generalLedgerBalances"
          operations:
            - name: get-balance
              method: GET

Monitors Oracle Integration Cloud integration flows for hotel property system data exchanges, checking run status and error rates, with alerts to the integration team.

naftiko: "0.5"
info:
  label: "Oracle Integration Cloud Flow Monitor"
  description: "Monitors Oracle Integration Cloud integration flows for hotel property system data exchanges, checking run status and error rates, with alerts to the integration team."
  tags:
    - integration
    - oracle-integration
    - microsoft-teams
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: integration-ops
      port: 8080
      tools:
        - name: monitor-integration-flow
          description: "Given an Oracle IC integration ID, check recent run statuses and alert on issues."
          inputParameters:
            - name: integration_id
              in: body
              type: string
              description: "The Oracle Integration Cloud integration identifier."
          steps:
            - name: get-runs
              type: call
              call: "oracle-ic.get-integration-runs"
              with:
                integration_id: "{{integration_id}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "integration-ops"
                message: "Integration {{integration_id}} status: Last run {{get-runs.items[0].status}} at {{get-runs.items[0].endTime}}. Errors in last 24h: {{get-runs.error_count}}"
  consumes:
    - type: http
      namespace: oracle-ic
      baseUri: "https://hilton-oic.integration.ocp.oraclecloud.com/ic/api"
      authentication:
        type: bearer
        token: "$secrets.oracle_ic_token"
      resources:
        - name: integrations
          path: "/integration/v1/monitoring/runs"
          operations:
            - name: get-integration-runs
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Oracle Opera PMS for real-time room inventory and availability for a given property and date range, returning room type counts and occupancy rates.

naftiko: "0.5"
info:
  label: "Oracle Opera Room Inventory Check"
  description: "Queries Oracle Opera PMS for real-time room inventory and availability for a given property and date range, returning room type counts and occupancy rates."
  tags:
    - revenue-management
    - oracle
    - hospitality
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: revenue-management
      port: 8080
      tools:
        - name: check-room-inventory
          description: "Given a property code and date range, return room availability by type and occupancy rate from Oracle Opera."
          inputParameters:
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code."
            - name: check_in
              in: body
              type: string
              description: "Check-in date in YYYY-MM-DD format."
            - name: check_out
              in: body
              type: string
              description: "Check-out date in YYYY-MM-DD format."
          call: "oracle-opera.get-availability"
          with:
            property_code: "{{property_code}}"
            start_date: "{{check_in}}"
            end_date: "{{check_out}}"
          outputParameters:
            - name: available_rooms
              type: string
              mapping: "$.availability.total_available"
            - name: occupancy_rate
              type: string
              mapping: "$.availability.occupancy_pct"
  consumes:
    - type: http
      namespace: oracle-opera
      baseUri: "https://hilton-opera.oraclehospitality.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_opera_token"
      resources:
        - name: availability
          path: "/properties/{{property_code}}/availability"
          inputParameters:
            - name: property_code
              in: path
          operations:
            - name: get-availability
              method: GET

Processes a firewall rule change request by validating via ServiceNow change management, applying the rule in Palo Alto Networks, and logging the change for compliance audit.

naftiko: "0.5"
info:
  label: "Palo Alto Firewall Rule Change Orchestrator"
  description: "Processes a firewall rule change request by validating via ServiceNow change management, applying the rule in Palo Alto Networks, and logging the change for compliance audit."
  tags:
    - security
    - palo-alto-networks
    - servicenow
    - compliance
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: network-security
      port: 8080
      tools:
        - name: process-firewall-change
          description: "Given a ServiceNow change request number and firewall rule details, validate approval and apply the rule change."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number."
            - name: rule_name
              in: body
              type: string
              description: "Name for the firewall rule."
            - name: source_zone
              in: body
              type: string
              description: "Source security zone."
            - name: dest_zone
              in: body
              type: string
              description: "Destination security zone."
          steps:
            - name: verify-change
              type: call
              call: "servicenow.get-change-request"
              with:
                number: "{{change_number}}"
            - name: apply-rule
              type: call
              call: "paloalto.create-security-rule"
              with:
                rule_name: "{{rule_name}}"
                source_zone: "{{source_zone}}"
                dest_zone: "{{dest_zone}}"
            - name: log-change
              type: call
              call: "servicenow.update-change-request"
              with:
                number: "{{change_number}}"
                work_notes: "Firewall rule {{rule_name}} applied successfully. Rule ID: {{apply-rule.rule_id}}"
                state: "implement"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: get-change-request
              method: GET
            - name: update-change-request
              method: PATCH
    - type: http
      namespace: paloalto
      baseUri: "https://hilton-panorama.paloaltonetworks.com/restapi/v10.2"
      authentication:
        type: apiKey
        key: "$secrets.paloalto_api_key"
      resources:
        - name: security-rules
          path: "/Policies/SecurityRules"
          operations:
            - name: create-security-rule
              method: POST

Returns the current headcount breakdown by property, department, and employment type from Workday for workforce planning and finance cost-center reporting.

naftiko: "0.5"
info:
  label: "Payroll Headcount Snapshot"
  description: "Returns the current headcount breakdown by property, department, and employment type from Workday for workforce planning and finance cost-center reporting."
  tags:
    - hr
    - finance
    - reporting
    - workday
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Returns headcount grouped by property, department, and cost center from Workday. Use for workforce planning, labor cost analysis, and quarterly finance reporting."
          call: "workday-hc.headcount-report"
          outputParameters:
            - name: employees
              type: array
              mapping: "$.Report_Entry"
              items:
                - name: employee_id
                  type: string
                  mapping: "$.Employee_ID"
                - name: full_name
                  type: string
                  mapping: "$.Employee_Name"
                - name: property
                  type: string
                  mapping: "$.Property_Code"
                - name: department
                  type: string
                  mapping: "$.Department"
                - name: employment_type
                  type: string
                  mapping: "$.Employment_Type"
  consumes:
    - type: http
      namespace: workday-hc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/service/customreport2/hilton"
      authentication:
        type: basic
        username: "$secrets.workday_report_user"
        password: "$secrets.workday_report_password"
      resources:
        - name: headcount
          path: "/Headcount_By_Property_Department"
          operations:
            - name: headcount-report
              method: GET
              outputRawFormat: json

Retrieves team skill assessment scores from Pluralsight, identifies gaps against role benchmarks, generates a development plan in SharePoint, and notifies managers via Teams.

naftiko: "0.5"
info:
  label: "Pluralsight Skills Gap Analysis"
  description: "Retrieves team skill assessment scores from Pluralsight, identifies gaps against role benchmarks, generates a development plan in SharePoint, and notifies managers via Teams."
  tags:
    - hr
    - pluralsight
    - sharepoint
    - microsoft-teams
    - learning
capability:
  exposes:
    - type: mcp
      namespace: talent-development
      port: 8080
      tools:
        - name: analyze-skills-gap
          description: "Given a Pluralsight team ID, analyze skill gaps and create development plans."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "The Pluralsight team identifier."
            - name: role_benchmark
              in: body
              type: string
              description: "The benchmark profile to compare against."
          steps:
            - name: get-assessments
              type: call
              call: "pluralsight.get-team-skills"
              with:
                team_id: "{{team_id}}"
            - name: create-plan
              type: call
              call: "sharepoint.create-item"
              with:
                site_id: "hilton-learning"
                list_name: "DevelopmentPlans"
                fields:
                  team_id: "{{team_id}}"
                  benchmark: "{{role_benchmark}}"
                  avg_score: "{{get-assessments.average_score}}"
                  gap_areas: "{{get-assessments.gap_summary}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engineering-leadership"
                message: "Skills gap analysis complete for team {{team_id}}. Average score: {{get-assessments.average_score}}/300. Key gaps: {{get-assessments.gap_summary}}. Development plan created."
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: teams
          path: "/teams/{{team_id}}/skills"
          inputParameters:
            - name: team_id
              in: path
          operations:
            - name: get-team-skills
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/sites/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: create-item
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a Power BI dataset refresh for the Revenue Per Available Room (RevPAR) dashboard and posts a confirmation to the revenue management Teams channel.

naftiko: "0.5"
info:
  label: "Power BI RevPAR Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the Revenue Per Available Room (RevPAR) dashboard and posts a confirmation to the revenue management Teams channel."
  tags:
    - data-analytics
    - reporting
    - power-bi
    - microsoft-teams
    - revenue-management
capability:
  exposes:
    - type: mcp
      namespace: revenue-analytics
      port: 8080
      tools:
        - name: refresh-revpar-dashboard
          description: "Given a Power BI workspace ID and dataset ID, trigger a RevPAR dashboard refresh and notify the revenue management channel in Teams. Use daily after night audit data loads."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID containing the RevPAR dataset."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID for the RevPAR report."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-revenue-team
              type: call
              call: "msteams-revenue.post-channel-message"
              with:
                channel_id: "$secrets.teams_revenue_channel_id"
                message: "RevPAR dashboard refresh triggered for dataset {{dataset_id}}. Updated data will be available shortly in Power BI."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams-revenue
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Triggers a Qlik Sense app reload for property operations dashboards and posts the refresh status to the operations Teams channel.

naftiko: "0.5"
info:
  label: "Qlik Sense Operations Dashboard Refresh"
  description: "Triggers a Qlik Sense app reload for property operations dashboards and posts the refresh status to the operations Teams channel."
  tags:
    - reporting
    - qlik-sense
    - microsoft-teams
    - operations
capability:
  exposes:
    - type: mcp
      namespace: operations-reporting
      port: 8080
      tools:
        - name: refresh-ops-dashboard
          description: "Given a Qlik Sense app ID, trigger a reload and notify the operations team."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The Qlik Sense app ID."
          steps:
            - name: trigger-reload
              type: call
              call: "qliksense.reload-app"
              with:
                app_id: "{{app_id}}"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "property-operations"
                message: "Operations dashboard refreshed. App: {{app_id}}, Reload ID: {{trigger-reload.id}}, Status: {{trigger-reload.status}}"
  consumes:
    - type: http
      namespace: qliksense
      baseUri: "https://hilton.us.qlikcloud.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.qliksense_token"
      resources:
        - name: reloads
          path: "/reloads"
          operations:
            - name: reload-app
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves corporate account health metrics from Salesforce including contract value, stay volume, satisfaction scores, and renewal dates for enterprise sales review.

naftiko: "0.5"
info:
  label: "Salesforce Corporate Account Health Dashboard"
  description: "Retrieves corporate account health metrics from Salesforce including contract value, stay volume, satisfaction scores, and renewal dates for enterprise sales review."
  tags:
    - sales
    - salesforce
    - reporting
    - account-management
capability:
  exposes:
    - type: mcp
      namespace: enterprise-sales
      port: 8080
      tools:
        - name: get-account-health
          description: "Given a Salesforce corporate account ID, retrieve account health metrics."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account-health"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: contract_value
              type: string
              mapping: "$.records[0].Contract_Value__c"
            - name: ytd_room_nights
              type: string
              mapping: "$.records[0].YTD_Room_Nights__c"
            - name: satisfaction_score
              type: string
              mapping: "$.records[0].CSAT_Score__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: get-account-health
              method: GET

Queries Salesforce for hotel event and meeting space availability for a given property, date, and capacity requirement, returning available rooms and pricing.

naftiko: "0.5"
info:
  label: "Salesforce Event Space Availability Check"
  description: "Queries Salesforce for hotel event and meeting space availability for a given property, date, and capacity requirement, returning available rooms and pricing."
  tags:
    - sales
    - salesforce
    - events
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: event-sales
      port: 8080
      tools:
        - name: check-event-space
          description: "Given a property code, date, and guest count, retrieve available event spaces from Salesforce."
          inputParameters:
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code."
            - name: event_date
              in: body
              type: string
              description: "Event date in YYYY-MM-DD format."
            - name: guest_count
              in: body
              type: string
              description: "Expected number of attendees."
          call: "salesforce.query-event-spaces"
          with:
            property_code: "{{property_code}}"
            date: "{{event_date}}"
            capacity: "{{guest_count}}"
          outputParameters:
            - name: available_spaces
              type: string
              mapping: "$.totalSize"
            - name: top_space
              type: string
              mapping: "$.records[0].Name"
            - name: rate
              type: string
              mapping: "$.records[0].Daily_Rate__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query-event-spaces
              method: GET

Retrieves upcoming franchise agreement renewals from Salesforce for managed and franchised properties and posts a 90-day renewal pipeline digest to the development team's Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Franchise Agreement Renewal Tracker"
  description: "Retrieves upcoming franchise agreement renewals from Salesforce for managed and franchised properties and posts a 90-day renewal pipeline digest to the development team's Teams channel."
  tags:
    - sales
    - crm
    - salesforce
    - franchise
    - development
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: franchise-development
      port: 8080
      tools:
        - name: get-renewal-pipeline
          description: "Retrieve Salesforce contract records for Hilton franchise agreements expiring within 90 days. Use for development team pipeline reviews and proactive owner outreach planning."
          inputParameters:
            - name: days_ahead
              in: body
              type: integer
              description: "Number of days ahead to look for expiring agreements, e.g. 90."
          steps:
            - name: query-renewals
              type: call
              call: "salesforce-renewals.query-contracts"
              with:
                days_ahead: "{{days_ahead}}"
            - name: post-pipeline
              type: call
              call: "msteams-dev.post-channel-message"
              with:
                channel_id: "$secrets.teams_development_channel_id"
                message: "Franchise Renewal Pipeline | Next {{days_ahead}} days | Contracts retrieved from Salesforce. Review expiring agreements and schedule owner outreach."
  consumes:
    - type: http
      namespace: salesforce-renewals
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contracts
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-contracts
              method: GET
    - type: http
      namespace: msteams-dev
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a new group booking inquiry arrives in Salesforce, creates a ServiceNow case for the events team, sends a Teams notification to the property GM, and logs the inquiry in SharePoint for tracking.

naftiko: "0.5"
info:
  label: "Salesforce Group Booking Inquiry Handler"
  description: "When a new group booking inquiry arrives in Salesforce, creates a ServiceNow case for the events team, sends a Teams notification to the property GM, and logs the inquiry in SharePoint for tracking."
  tags:
    - sales
    - salesforce
    - servicenow
    - microsoft-teams
    - sharepoint
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: group-sales
      port: 8080
      tools:
        - name: process-group-inquiry
          description: "Given a Salesforce opportunity ID for a group booking, create a ServiceNow case, notify the property GM via Teams, and log in SharePoint."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID for the group booking inquiry."
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code where the event would be held."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-case
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Group booking inquiry: {{get-opportunity.Name}} - {{get-opportunity.Amount}} at {{property_code}}"
                category: "events_sales"
                assigned_to: "Events_Team"
            - name: notify-gm
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "property-{{property_code}}-leadership"
                message: "New group booking inquiry: {{get-opportunity.Name}} for {{get-opportunity.Guest_Count__c}} guests, est. revenue {{get-opportunity.Amount}}. Case: {{create-case.number}}"
            - name: log-inquiry
              type: call
              call: "sharepoint.create-item"
              with:
                site_id: "hilton-group-sales"
                list_name: "GroupInquiries"
                fields:
                  property: "{{property_code}}"
                  opportunity: "{{get-opportunity.Name}}"
                  case_number: "{{create-case.number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/sites/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: create-item
              method: POST

When a Hilton group sales opportunity is updated in Salesforce, creates a ServiceNow task for the events operations team to begin venue and catering setup planning.

naftiko: "0.5"
info:
  label: "Salesforce Group Sales Opportunity Sync"
  description: "When a Hilton group sales opportunity is updated in Salesforce, creates a ServiceNow task for the events operations team to begin venue and catering setup planning."
  tags:
    - sales
    - crm
    - salesforce
    - servicenow
    - events
    - group-sales
capability:
  exposes:
    - type: mcp
      namespace: group-sales
      port: 8080
      tools:
        - name: sync-group-opportunity
          description: "Given a Salesforce group sales opportunity ID, retrieve event details and create a ServiceNow operations task for the events team. Use when a group booking reaches the contracting stage."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce Opportunity ID for the group sales event."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce-opp.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-ops-task
              type: call
              call: "servicenow-events.create-incident"
              with:
                short_description: "Events setup: {{get-opportunity.name}} at {{get-opportunity.property}}"
                category: "events_operations"
                description: "Group booking {{opportunity_id}} in contracting stage. Event: {{get-opportunity.name}}. Dates: {{get-opportunity.event_start_date}} to {{get-opportunity.event_end_date}}. Attendees: {{get-opportunity.attendee_count}}."
  consumes:
    - type: http
      namespace: salesforce-opp
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: servicenow-events
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Retrieves Hilton Honors member tier status, point balance, and stay history from Salesforce for guest service and recognition purposes.

naftiko: "0.5"
info:
  label: "Salesforce Honors Tier Status Lookup"
  description: "Retrieves Hilton Honors member tier status, point balance, and stay history from Salesforce for guest service and recognition purposes."
  tags:
    - loyalty
    - salesforce
    - guest-experience
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: get-honors-status
          description: "Given a Hilton Honors member number, retrieve tier status and point balance from Salesforce."
          inputParameters:
            - name: member_number
              in: body
              type: string
              description: "The Hilton Honors membership number."
          call: "salesforce.get-member"
          with:
            member_number: "{{member_number}}"
          outputParameters:
            - name: tier
              type: string
              mapping: "$.records[0].Tier_Status__c"
            - name: points_balance
              type: string
              mapping: "$.records[0].Points_Balance__c"
            - name: lifetime_nights
              type: string
              mapping: "$.records[0].Lifetime_Nights__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: get-member
              method: GET

Retrieves a Hilton Honors loyalty member record from Salesforce by membership number, returning tier status, point balance, and stay history for guest service use.

naftiko: "0.5"
info:
  label: "Salesforce Loyalty Member Lookup"
  description: "Retrieves a Hilton Honors loyalty member record from Salesforce by membership number, returning tier status, point balance, and stay history for guest service use."
  tags:
    - customer-success
    - salesforce
    - loyalty
    - guest-experience
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: loyalty-crm
      port: 8080
      tools:
        - name: get-loyalty-member
          description: "Given a Hilton Honors membership number, retrieve member tier, point balance, lifetime nights, and recent stays from Salesforce. Use for front desk guest recognition and loyalty service workflows."
          inputParameters:
            - name: membership_number
              in: body
              type: string
              description: "The Hilton Honors membership number, e.g. 9876543210."
          call: "salesforce-loyalty.query-member"
          with:
            membership_number: "{{membership_number}}"
          outputParameters:
            - name: member_name
              type: string
              mapping: "$.records[0].Name"
            - name: tier
              type: string
              mapping: "$.records[0].Tier__c"
            - name: point_balance
              type: string
              mapping: "$.records[0].Point_Balance__c"
            - name: lifetime_nights
              type: string
              mapping: "$.records[0].Lifetime_Nights__c"
  consumes:
    - type: http
      namespace: salesforce-loyalty
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: loyalty-query
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-member
              method: GET

Retrieves a monthly expense summary from SAP Concur for a given cost center, returning total spend, top categories, and policy violations count.

naftiko: "0.5"
info:
  label: "SAP Concur Monthly Expense Summary"
  description: "Retrieves a monthly expense summary from SAP Concur for a given cost center, returning total spend, top categories, and policy violations count."
  tags:
    - finance
    - sap-concur
    - reporting
    - expense-management
capability:
  exposes:
    - type: mcp
      namespace: finance-expenses
      port: 8080
      tools:
        - name: get-monthly-expense-summary
          description: "Given a cost center and month, retrieve expense totals and category breakdown from SAP Concur."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "The cost center code."
            - name: month
              in: body
              type: string
              description: "Month in YYYY-MM format."
          call: "concur.get-expense-summary"
          with:
            cost_center: "{{cost_center}}"
            month: "{{month}}"
          outputParameters:
            - name: total_spend
              type: string
              mapping: "$.summary.total_amount"
            - name: violation_count
              type: string
              mapping: "$.summary.policy_violations"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports"
          operations:
            - name: get-expense-summary
              method: GET

Retrieves submitted expense reports from SAP Concur for a given cost center and flags out-of-policy items, returning a structured audit list for the travel and expense team.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Expense Audit"
  description: "Retrieves submitted expense reports from SAP Concur for a given cost center and flags out-of-policy items, returning a structured audit list for the travel and expense team."
  tags:
    - finance
    - travel
    - sap-concur
    - audit
    - expense-management
capability:
  exposes:
    - type: mcp
      namespace: travel-expense
      port: 8080
      tools:
        - name: audit-expense-reports
          description: "Given a SAP Concur cost center code, retrieve all submitted expense reports and identify out-of-policy expenses. Use for monthly T&E audits and policy compliance reviews."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "The cost center code to retrieve expense reports for."
          call: "concur.list-reports-by-cost-center"
          with:
            cost_center: "{{cost_center}}"
          outputParameters:
            - name: reports
              type: array
              mapping: "$.Items"
              items:
                - name: report_id
                  type: string
                  mapping: "$.ID"
                - name: submitter
                  type: string
                  mapping: "$.OwnerName"
                - name: total
                  type: string
                  mapping: "$.Total"
                - name: policy_compliant
                  type: string
                  mapping: "$.PolicyCompliant"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports"
          inputParameters:
            - name: cost_center
              in: query
          operations:
            - name: list-reports-by-cost-center
              method: GET

Queries SAP HANA for real-time revenue data across hotel properties, returning ADR, occupancy, and RevPAR metrics for financial analysis.

naftiko: "0.5"
info:
  label: "SAP HANA Revenue Reporting Query"
  description: "Queries SAP HANA for real-time revenue data across hotel properties, returning ADR, occupancy, and RevPAR metrics for financial analysis."
  tags:
    - finance
    - sap-hana
    - revenue-management
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: revenue-analytics
      port: 8080
      tools:
        - name: query-revenue-metrics
          description: "Given a region and date range, retrieve revenue metrics from SAP HANA."
          inputParameters:
            - name: region
              in: body
              type: string
              description: "The operating region: americas, emea, apac."
            - name: period
              in: body
              type: string
              description: "Reporting period in YYYY-MM format."
          call: "saphana.run-query"
          with:
            region: "{{region}}"
            period: "{{period}}"
          outputParameters:
            - name: adr
              type: string
              mapping: "$.results[0].avg_daily_rate"
            - name: occupancy
              type: string
              mapping: "$.results[0].occupancy_pct"
            - name: revpar
              type: string
              mapping: "$.results[0].revpar"
  consumes:
    - type: http
      namespace: saphana
      baseUri: "https://hilton-hana.cfapps.sap.hana.ondemand.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.saphana_token"
      resources:
        - name: queries
          path: "/query"
          operations:
            - name: run-query
              method: POST

Validates vendor invoices against SAP purchase orders and goods receipts, flags mismatches, creates a ServiceNow ticket for exceptions, and notifies accounts payable via Teams.

naftiko: "0.5"
info:
  label: "SAP Invoice Three-Way Match Validator"
  description: "Validates vendor invoices against SAP purchase orders and goods receipts, flags mismatches, creates a ServiceNow ticket for exceptions, and notifies accounts payable via Teams."
  tags:
    - finance
    - sap
    - servicenow
    - microsoft-teams
    - accounts-payable
capability:
  exposes:
    - type: mcp
      namespace: finance-ap
      port: 8080
      tools:
        - name: validate-invoice-match
          description: "Given an SAP invoice number, perform three-way match validation and handle exceptions."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP invoice document number."
          steps:
            - name: get-invoice
              type: call
              call: "sap.get-invoice"
              with:
                invoice_number: "{{invoice_number}}"
            - name: get-po
              type: call
              call: "sap.get-purchase-order"
              with:
                po_number: "{{get-invoice.po_reference}}"
            - name: create-exception
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Invoice mismatch: {{invoice_number}} vs PO {{get-invoice.po_reference}}"
                category: "finance_ap"
                assigned_to: "AP_Exceptions"
            - name: notify-ap
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "accounts-payable"
                message: "Invoice {{invoice_number}} match result: PO {{get-invoice.po_reference}}, Invoice amount: {{get-invoice.amount}}, PO amount: {{get-po.net_value}}. Exception ticket: {{create-exception.number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hilton-sap.s4hana.cloud.sap/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: invoices
          path: "/invoices/{{invoice_number}}"
          inputParameters:
            - name: invoice_number
              in: path
          operations:
            - name: get-invoice
              method: GET
        - name: purchase-orders
          path: "/purchase-orders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-purchase-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a ServiceNow change request for review, returning its approval status, risk classification, and implementation schedule for CAB governance workflows.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Approval"
  description: "Retrieves a ServiceNow change request for review, returning its approval status, risk classification, and implementation schedule for CAB governance workflows."
  tags:
    - itsm
    - change-management
    - servicenow
    - governance
capability:
  exposes:
    - type: mcp
      namespace: itsm-change
      port: 8080
      tools:
        - name: get-change-request
          description: "Given a ServiceNow change request number, retrieve its state, risk level, approval status, and scheduled implementation window. Use for CAB review and change governance processes."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number, e.g. CHG0034567."
          call: "servicenow-change.get-change"
          with:
            change_number: "{{change_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: risk
              type: string
              mapping: "$.result.risk"
            - name: approval
              type: string
              mapping: "$.result.approval"
            - name: start_date
              type: string
              mapping: "$.result.start_date"
  consumes:
    - type: http
      namespace: servicenow-change
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          inputParameters:
            - name: change_number
              in: query
          operations:
            - name: get-change
              method: GET

Escalates a ServiceNow incident to P1, reassigns it to the IT escalation group, and notifies the CTO via Teams when a critical hotel system (booking engine, PMS, or payment) is impacted.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Escalation"
  description: "Escalates a ServiceNow incident to P1, reassigns it to the IT escalation group, and notifies the CTO via Teams when a critical hotel system (booking engine, PMS, or payment) is impacted."
  tags:
    - itsm
    - incident-response
    - servicenow
    - microsoft-teams
    - sla
    - escalation
capability:
  exposes:
    - type: mcp
      namespace: itsm-escalation
      port: 8080
      tools:
        - name: escalate-incident
          description: "Given a ServiceNow incident number and escalation reason, update priority to P1, reassign to the IT escalation group, and notify the CTO channel in Teams. Use for critical hotel system failures impacting guests or revenue."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number to escalate, e.g. INC0045678."
            - name: escalation_reason
              in: body
              type: string
              description: "Business impact and reason for escalation."
          steps:
            - name: update-incident
              type: call
              call: "servicenow-esc.patch-incident"
              with:
                incident_number: "{{incident_number}}"
                priority: "1"
                assignment_group: "IT_Escalation"
            - name: notify-cto
              type: call
              call: "msteams-esc.post-channel-message"
              with:
                channel_id: "$secrets.teams_cto_channel_id"
                message: "CRITICAL ESCALATION P1 | Incident: {{incident_number}} | Impact: {{escalation_reason}} | IT Escalation team engaged. Guest experience may be affected."
  consumes:
    - type: http
      namespace: servicenow-esc
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: patch-incident
              method: PATCH
    - type: http
      namespace: msteams-esc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries ServiceNow CMDB for IT asset details by asset tag or serial number, returning device type, assigned user, location, and warranty status.

naftiko: "0.5"
info:
  label: "ServiceNow IT Asset Lookup"
  description: "Queries ServiceNow CMDB for IT asset details by asset tag or serial number, returning device type, assigned user, location, and warranty status."
  tags:
    - it-operations
    - servicenow
    - asset-management
capability:
  exposes:
    - type: mcp
      namespace: it-assets
      port: 8080
      tools:
        - name: lookup-asset
          description: "Given an asset tag, retrieve device details from ServiceNow CMDB."
          inputParameters:
            - name: asset_tag
              in: body
              type: string
              description: "The IT asset tag identifier."
          call: "servicenow.get-asset"
          with:
            asset_tag: "{{asset_tag}}"
          outputParameters:
            - name: device_type
              type: string
              mapping: "$.result.sys_class_name"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
            - name: location
              type: string
              mapping: "$.result.location.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/alm_hardware"
          operations:
            - name: get-asset
              method: GET

Creates and publishes knowledge base articles in ServiceNow from resolved incident patterns, then notifies the IT support team via Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Knowledge Base Article Publisher"
  description: "Creates and publishes knowledge base articles in ServiceNow from resolved incident patterns, then notifies the IT support team via Teams."
  tags:
    - it-operations
    - servicenow
    - microsoft-teams
    - knowledge-management
capability:
  exposes:
    - type: mcp
      namespace: knowledge-ops
      port: 8080
      tools:
        - name: publish-kb-article
          description: "Given incident details and resolution steps, create a ServiceNow KB article and notify the team."
          inputParameters:
            - name: title
              in: body
              type: string
              description: "The KB article title."
            - name: category
              in: body
              type: string
              description: "The knowledge category."
            - name: resolution
              in: body
              type: string
              description: "The resolution steps content."
          steps:
            - name: create-article
              type: call
              call: "servicenow.create-kb-article"
              with:
                title: "{{title}}"
                category: "{{category}}"
                text: "{{resolution}}"
            - name: notify-support
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "it-service-desk"
                message: "New KB article published: {{title}}. Article: {{create-article.number}}. Category: {{category}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: kb-articles
          path: "/table/kb_knowledge"
          operations:
            - name: create-kb-article
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Generates a problem management trend report from ServiceNow, identifying recurring issues, root causes, and resolution times for IT leadership review.

naftiko: "0.5"
info:
  label: "ServiceNow Problem Management Trend Report"
  description: "Generates a problem management trend report from ServiceNow, identifying recurring issues, root causes, and resolution times for IT leadership review."
  tags:
    - it-operations
    - servicenow
    - reporting
    - problem-management
capability:
  exposes:
    - type: mcp
      namespace: it-service-management
      port: 8080
      tools:
        - name: get-problem-trends
          description: "Given a date range, retrieve problem management trend data from ServiceNow."
          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: "servicenow.get-problem-stats"
          with:
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: total_problems
              type: string
              mapping: "$.result.stats.total"
            - name: avg_resolution_days
              type: string
              mapping: "$.result.stats.avg_resolution"
            - name: top_category
              type: string
              mapping: "$.result.stats.top_category"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: stats
          path: "/stats/problem"
          operations:
            - name: get-problem-stats
              method: GET

Creates a new SharePoint document library item for an updated hotel operations policy and notifies all property general managers via Teams to review and acknowledge the update.

naftiko: "0.5"
info:
  label: "SharePoint Policy Document Distribution"
  description: "Creates a new SharePoint document library item for an updated hotel operations policy and notifies all property general managers via Teams to review and acknowledge the update."
  tags:
    - document-management
    - sharepoint
    - microsoft-teams
    - compliance
    - operations
capability:
  exposes:
    - type: mcp
      namespace: policy-distribution
      port: 8080
      tools:
        - name: distribute-policy-update
          description: "Given a SharePoint site ID, document name, and policy version, create a new document item and notify the GM distribution channel in Teams. Use when hotel operations policies are updated and require property-wide acknowledgment."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID for the operations policy library."
            - name: document_name
              in: body
              type: string
              description: "The name of the updated policy document."
            - name: policy_version
              in: body
              type: string
              description: "The new policy version number, e.g. v3.2."
            - name: effective_date
              in: body
              type: string
              description: "The date the policy takes effect in YYYY-MM-DD format."
          steps:
            - name: create-document-item
              type: call
              call: "sharepoint-policy.create-item"
              with:
                site_id: "{{site_id}}"
                document_name: "{{document_name}}"
                policy_version: "{{policy_version}}"
            - name: notify-gms
              type: call
              call: "msteams-ops.post-channel-message"
              with:
                channel_id: "$secrets.teams_gm_distribution_channel_id"
                message: "Policy Update | {{document_name}} {{policy_version}} | Effective: {{effective_date}} | Document uploaded to SharePoint. Please review and acknowledge by the effective date."
  consumes:
    - type: http
      namespace: sharepoint-policy
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/sites/{{site_id}}/lists/PolicyDocuments/items"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: create-item
              method: POST
    - type: http
      namespace: msteams-ops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Updates property operations manuals in SharePoint when policy changes are approved, notifies affected properties via Teams, and creates a Confluence knowledge base entry.

naftiko: "0.5"
info:
  label: "SharePoint Property Operations Manual Updater"
  description: "Updates property operations manuals in SharePoint when policy changes are approved, notifies affected properties via Teams, and creates a Confluence knowledge base entry."
  tags:
    - operations
    - sharepoint
    - microsoft-teams
    - confluence
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: property-operations
      port: 8080
      tools:
        - name: update-operations-manual
          description: "Given a policy document ID and target properties, update SharePoint manuals and notify teams."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The SharePoint document ID for the updated policy."
            - name: brand
              in: body
              type: string
              description: "The Hilton brand for targeted distribution."
          steps:
            - name: get-document
              type: call
              call: "sharepoint.get-document"
              with:
                site_id: "hilton-policies"
                document_id: "{{document_id}}"
            - name: create-kb
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Policy Update: {{get-document.name}}"
                body: "Updated policy document available. Version: {{get-document.eTag}}"
            - name: notify-properties
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "brand-{{brand}}-operations"
                message: "Operations manual updated: {{get-document.name}}. Please review the latest version. KB article: {{create-kb._links.webui}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/sites/{{site_id}}/drive/items/{{document_id}}"
          inputParameters:
            - name: site_id
              in: path
            - name: document_id
              in: path
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://hilton.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves network device status and performance metrics from SolarWinds for hotel property infrastructure, including uptime, CPU, memory, and interface utilization.

naftiko: "0.5"
info:
  label: "SolarWinds Network Device Health Check"
  description: "Retrieves network device status and performance metrics from SolarWinds for hotel property infrastructure, including uptime, CPU, memory, and interface utilization."
  tags:
    - infrastructure
    - solarwinds
    - monitoring
    - networking
capability:
  exposes:
    - type: mcp
      namespace: network-ops
      port: 8080
      tools:
        - name: check-network-device
          description: "Given a SolarWinds node ID, retrieve device health metrics."
          inputParameters:
            - name: node_id
              in: body
              type: string
              description: "The SolarWinds node ID."
          call: "solarwinds.get-node"
          with:
            node_id: "{{node_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.node.StatusDescription"
            - name: cpu_load
              type: string
              mapping: "$.node.CPULoad"
            - name: memory_used_pct
              type: string
              mapping: "$.node.PercentMemoryUsed"
  consumes:
    - type: http
      namespace: solarwinds
      baseUri: "https://hilton-solarwinds.com/SolarWinds/InformationService/v3/Json"
      authentication:
        type: basic
        username: "$secrets.solarwinds_user"
        password: "$secrets.solarwinds_password"
      resources:
        - name: nodes
          path: "/Query"
          operations:
            - name: get-node
              method: POST

Triggers a Tableau workbook refresh for the revenue forecasting dashboard, verifies data freshness, and posts results to the finance Teams channel.

naftiko: "0.5"
info:
  label: "Tableau Revenue Forecast Refresh"
  description: "Triggers a Tableau workbook refresh for the revenue forecasting dashboard, verifies data freshness, and posts results to the finance Teams channel."
  tags:
    - finance
    - tableau
    - microsoft-teams
    - reporting
    - revenue-management
capability:
  exposes:
    - type: mcp
      namespace: finance-reporting
      port: 8080
      tools:
        - name: refresh-revenue-forecast
          description: "Given a Tableau workbook ID, trigger a refresh and notify the finance team with results."
          inputParameters:
            - name: workbook_id
              in: body
              type: string
              description: "The Tableau workbook ID for the revenue forecast."
          steps:
            - name: trigger-refresh
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "{{workbook_id}}"
            - name: get-status
              type: call
              call: "tableau.get-job-status"
              with:
                job_id: "{{trigger-refresh.job.id}}"
            - name: notify-finance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "finance-leadership"
                message: "Revenue forecast dashboard refreshed. Status: {{get-status.job.finishCode}}. Last data update: {{get-status.job.completedAt}}."
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://hilton-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/hilton/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST
        - name: jobs
          path: "/sites/hilton/jobs/{{job_id}}"
          inputParameters:
            - name: job_id
              in: path
          operations:
            - name: get-job-status
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries the Teradata data warehouse for guest stay analytics including average length of stay, repeat visit frequency, and revenue per guest segment.

naftiko: "0.5"
info:
  label: "Teradata Guest Analytics Query"
  description: "Queries the Teradata data warehouse for guest stay analytics including average length of stay, repeat visit frequency, and revenue per guest segment."
  tags:
    - analytics
    - teradata
    - reporting
    - guest-experience
capability:
  exposes:
    - type: mcp
      namespace: guest-analytics
      port: 8080
      tools:
        - name: query-guest-analytics
          description: "Given a guest segment and date range, retrieve analytics from Teradata."
          inputParameters:
            - name: segment
              in: body
              type: string
              description: "Guest segment: business, leisure, group."
            - name: quarter
              in: body
              type: string
              description: "Fiscal quarter, e.g. Q1-2026."
          call: "teradata.run-query"
          with:
            segment: "{{segment}}"
            quarter: "{{quarter}}"
          outputParameters:
            - name: avg_length_of_stay
              type: string
              mapping: "$.results[0].avg_los"
            - name: repeat_rate
              type: string
              mapping: "$.results[0].repeat_pct"
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://hilton-teradata.analytics.teradata.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/queries"
          operations:
            - name: run-query
              method: POST

Monitors Twitter for Hilton brand mentions, filters high-engagement or negative sentiment tweets, creates Salesforce cases for guest complaints, and alerts social media team via Teams.

naftiko: "0.5"
info:
  label: "Twitter Brand Mention Monitor"
  description: "Monitors Twitter for Hilton brand mentions, filters high-engagement or negative sentiment tweets, creates Salesforce cases for guest complaints, and alerts social media team via Teams."
  tags:
    - marketing
    - twitter
    - salesforce
    - microsoft-teams
    - social-media
capability:
  exposes:
    - type: mcp
      namespace: social-listening
      port: 8080
      tools:
        - name: process-brand-mention
          description: "Given a Twitter search query, find recent brand mentions and escalate negative ones."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Twitter search query, e.g. @HiltonHonors OR @Hilton."
          steps:
            - name: search-tweets
              type: call
              call: "twitter.search-recent"
              with:
                query: "{{query}}"
                max_results: "50"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Social media escalation: Twitter brand mention"
                description: "{{search-tweets.summary}}"
                origin: "Twitter"
                priority: "High"
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "social-media-team"
                message: "Brand mention alert: {{search-tweets.result_count}} mentions found. Negative sentiment: {{search-tweets.negative_count}}. Salesforce case: {{create-case.CaseNumber}}"
  consumes:
    - type: http
      namespace: twitter
      baseUri: "https://api.twitter.com/2"
      authentication:
        type: bearer
        token: "$secrets.twitter_bearer_token"
      resources:
        - name: tweets
          path: "/tweets/search/recent"
          operations:
            - name: search-recent
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.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: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Initiates a data restore from Veritas NetBackup, creates a ServiceNow change request for the restore operation, and notifies the requestor via Teams upon completion.

naftiko: "0.5"
info:
  label: "Veritas NetBackup Restore Request"
  description: "Initiates a data restore from Veritas NetBackup, creates a ServiceNow change request for the restore operation, and notifies the requestor via Teams upon completion."
  tags:
    - infrastructure
    - veritas-netbackup
    - servicenow
    - microsoft-teams
    - data-protection
capability:
  exposes:
    - type: mcp
      namespace: backup-recovery
      port: 8080
      tools:
        - name: initiate-restore
          description: "Given a backup image ID and target location, initiate a restore and track via ServiceNow."
          inputParameters:
            - name: backup_id
              in: body
              type: string
              description: "The NetBackup image ID."
            - name: target_path
              in: body
              type: string
              description: "The restore target file path."
            - name: requestor_email
              in: body
              type: string
              description: "Email of the person requesting the restore."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "Data restore: backup {{backup_id}} to {{target_path}}"
                category: "infrastructure"
                assigned_to: "Backup_Team"
            - name: start-restore
              type: call
              call: "netbackup.restore-image"
              with:
                backup_id: "{{backup_id}}"
                target_path: "{{target_path}}"
            - name: notify-requestor
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{requestor_email}}"
                message: "Data restore initiated. Backup: {{backup_id}}, Target: {{target_path}}. Change request: {{create-change.number}}. Restore job: {{start-restore.job_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change-request
              method: POST
    - type: http
      namespace: netbackup
      baseUri: "https://hilton-netbackup.com/netbackup/admin/api/v4"
      authentication:
        type: bearer
        token: "$secrets.netbackup_token"
      resources:
        - name: restores
          path: "/recovery/workloads/vmware/recoverypoints/{{backup_id}}/recover"
          inputParameters:
            - name: backup_id
              in: path
          operations:
            - name: restore-image
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chat
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Sends pre-arrival and post-stay WhatsApp messages to Hilton guests using approved templates, pulling guest data from Salesforce and logging communications in ServiceNow.

naftiko: "0.5"
info:
  label: "WhatsApp Guest Communication Sender"
  description: "Sends pre-arrival and post-stay WhatsApp messages to Hilton guests using approved templates, pulling guest data from Salesforce and logging communications in ServiceNow."
  tags:
    - guest-experience
    - whatsapp
    - salesforce
    - servicenow
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: guest-communications
      port: 8080
      tools:
        - name: send-guest-whatsapp
          description: "Given a reservation ID and template type, send a WhatsApp message to the guest and log the communication."
          inputParameters:
            - name: reservation_id
              in: body
              type: string
              description: "The reservation confirmation number."
            - name: template_type
              in: body
              type: string
              description: "Template type: pre_arrival, welcome, or post_stay."
          steps:
            - name: get-reservation
              type: call
              call: "salesforce.get-reservation"
              with:
                reservation_id: "{{reservation_id}}"
            - name: send-message
              type: call
              call: "whatsapp.send-template"
              with:
                phone_number: "{{get-reservation.Guest_Phone__c}}"
                template_name: "hilton_{{template_type}}"
                parameters:
                  guest_name: "{{get-reservation.Guest_Name__c}}"
                  property_name: "{{get-reservation.Property_Name__c}}"
                  check_in_date: "{{get-reservation.Check_In__c}}"
            - name: log-communication
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_guest_communications"
                fields:
                  reservation: "{{reservation_id}}"
                  channel: "whatsapp"
                  template: "{{template_type}}"
                  status: "{{send-message.status}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: get-reservation
              method: GET
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          operations:
            - name: send-template
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Initiates the annual performance review cycle for hotel management associates in Workday by notifying all department managers via Teams to complete reviews by the submission deadline.

naftiko: "0.5"
info:
  label: "Workday Annual Performance Review Kickoff"
  description: "Initiates the annual performance review cycle for hotel management associates in Workday by notifying all department managers via Teams to complete reviews by the submission deadline."
  tags:
    - hr
    - performance-management
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-performance
      port: 8080
      tools:
        - name: kickoff-performance-reviews
          description: "Given a Workday department ID, review cycle name, and deadline, retrieve active associates and notify managers via Teams to begin the review process in Workday."
          inputParameters:
            - name: department_id
              in: body
              type: string
              description: "The Workday department ID to kick off reviews for."
            - name: review_cycle
              in: body
              type: string
              description: "The review cycle name, e.g. 2025 Annual Performance Review."
            - name: deadline
              in: body
              type: string
              description: "Submission deadline in YYYY-MM-DD format."
          steps:
            - name: get-employees
              type: call
              call: "workday-perf.list-workers"
              with:
                department_id: "{{department_id}}"
            - name: notify-hr-channel
              type: call
              call: "msteams-perf.post-channel-message"
              with:
                channel_id: "$secrets.teams_hr_channel_id"
                message: "Performance Review Kickoff | {{review_cycle}} | Department: {{department_id}} | Deadline: {{deadline}} | Please complete all reviews in Workday by the deadline."
  consumes:
    - type: http
      namespace: workday-perf
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/hilton/workers"
          inputParameters:
            - name: department_id
              in: query
          operations:
            - name: list-workers
              method: GET
    - type: http
      namespace: msteams-perf
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

During open enrollment, pulls pending enrollment status from Workday, sends personalized reminder emails via Outlook, and tracks completion in SharePoint.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Reminder Orchestrator"
  description: "During open enrollment, pulls pending enrollment status from Workday, sends personalized reminder emails via Outlook, and tracks completion in SharePoint."
  tags:
    - hr
    - workday
    - microsoft-outlook
    - sharepoint
    - benefits
capability:
  exposes:
    - type: mcp
      namespace: hr-benefits
      port: 8080
      tools:
        - name: send-enrollment-reminders
          description: "Given an enrollment period ID, identify pending enrollments and send reminders."
          inputParameters:
            - name: enrollment_period
              in: body
              type: string
              description: "The enrollment period identifier."
          steps:
            - name: get-pending
              type: call
              call: "workday.get-pending-enrollments"
              with:
                period: "{{enrollment_period}}"
            - name: send-reminders
              type: call
              call: "outlook.send-bulk-email"
              with:
                recipients: "{{get-pending.pending_emails}}"
                subject: "Action Required: Complete Your Benefits Enrollment"
                body: "Open enrollment closes soon. Please complete your benefits selections in Workday."
            - name: update-tracker
              type: call
              call: "sharepoint.create-item"
              with:
                site_id: "hilton-hr-benefits"
                list_name: "EnrollmentTracker"
                fields:
                  period: "{{enrollment_period}}"
                  pending_count: "{{get-pending.total_pending}}"
                  reminders_sent: "{{get-pending.total_pending}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefits
          path: "/hilton/benefits/enrollments"
          operations:
            - name: get-pending-enrollments
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/hr-benefits@hilton.com/sendMail"
          operations:
            - name: send-bulk-email
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: list-items
          path: "/sites/{{site_id}}/lists/{{list_name}}/items"
          inputParameters:
            - name: site_id
              in: path
            - name: list_name
              in: path
          operations:
            - name: create-item
              method: POST

When a compensation review cycle is initiated, pulls employee data from Workday, generates a Power BI dashboard refresh, creates a SharePoint folder for review documents, and notifies HR business partners via Teams.

naftiko: "0.5"
info:
  label: "Workday Compensation Review Orchestrator"
  description: "When a compensation review cycle is initiated, pulls employee data from Workday, generates a Power BI dashboard refresh, creates a SharePoint folder for review documents, and notifies HR business partners via Teams."
  tags:
    - hr
    - workday
    - power-bi
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-compensation
      port: 8080
      tools:
        - name: initiate-comp-review
          description: "Given a review cycle ID and department, orchestrate compensation review preparation across Workday, Power BI, SharePoint, and Teams."
          inputParameters:
            - name: cycle_id
              in: body
              type: string
              description: "The compensation review cycle identifier."
            - name: department
              in: body
              type: string
              description: "The department name for the review scope."
          steps:
            - name: get-employees
              type: call
              call: "workday.get-department-workers"
              with:
                department: "{{department}}"
                cycle_id: "{{cycle_id}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "comp-review-{{cycle_id}}"
            - name: create-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hilton-hr-compensation"
                folder_path: "CompReviews/{{cycle_id}}/{{department}}"
            - name: notify-hrbp
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "hr-business-partners"
                message: "Compensation review cycle {{cycle_id}} initiated for {{department}}. {{get-employees.total_count}} employees in scope. Dashboard refreshing. Documents: {{create-folder.webUrl}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/hilton/workers"
          operations:
            - name: get-department-workers
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{{site_id}}/drive/root/children"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves current headcount and open position data from Workday for a specified Hilton property code, returning staffing levels by department.

naftiko: "0.5"
info:
  label: "Workday Headcount by Property Lookup"
  description: "Retrieves current headcount and open position data from Workday for a specified Hilton property code, returning staffing levels by department."
  tags:
    - hr
    - workday
    - reporting
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-property-headcount
          description: "Given a Hilton property code, retrieve current headcount and open positions from Workday broken down by department."
          inputParameters:
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code, e.g. NYCHH."
          call: "workday.get-headcount"
          with:
            property_code: "{{property_code}}"
          outputParameters:
            - name: total_headcount
              type: string
              mapping: "$.summary.total_active"
            - name: open_positions
              type: string
              mapping: "$.summary.open_reqs"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/hilton/headcount/{{property_code}}"
          inputParameters:
            - name: property_code
              in: path
          operations:
            - name: get-headcount
              method: GET

Checks compliance training completion status in Workday Learning for a property, identifies overdue associates, sends reminder emails via Outlook, and escalates to the property HR lead via Teams.

naftiko: "0.5"
info:
  label: "Workday Learning Compliance Training Tracker"
  description: "Checks compliance training completion status in Workday Learning for a property, identifies overdue associates, sends reminder emails via Outlook, and escalates to the property HR lead via Teams."
  tags:
    - hr
    - workday
    - microsoft-outlook
    - microsoft-teams
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: hr-compliance
      port: 8080
      tools:
        - name: track-compliance-training
          description: "Given a property code and training program ID, check completion rates and escalate overdue items."
          inputParameters:
            - name: property_code
              in: body
              type: string
              description: "The Hilton property code."
            - name: program_id
              in: body
              type: string
              description: "The Workday Learning program identifier."
          steps:
            - name: get-completion
              type: call
              call: "workday.get-training-status"
              with:
                property_code: "{{property_code}}"
                program_id: "{{program_id}}"
            - name: send-reminders
              type: call
              call: "outlook.send-bulk-email"
              with:
                recipients: "{{get-completion.overdue_emails}}"
                subject: "Action Required: Complete {{get-completion.program_name}} training"
                body: "Your compliance training is overdue. Please complete by end of week."
            - name: escalate-hr
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "property-{{property_code}}-hr"
                message: "Compliance training alert for {{get-completion.program_name}}: {{get-completion.completion_rate}}% complete. {{get-completion.overdue_count}} associates overdue. Reminders sent."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: learning
          path: "/hilton/learning/programs/{{program_id}}/status"
          inputParameters:
            - name: program_id
              in: path
          operations:
            - name: get-training-status
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/hr-noreply@hilton.com/sendMail"
          operations:
            - name: send-bulk-email
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves organizational hierarchy data from Workday for a given manager or department, returning direct reports, span of control, and reporting chain.

naftiko: "0.5"
info:
  label: "Workday Org Chart Lookup"
  description: "Retrieves organizational hierarchy data from Workday for a given manager or department, returning direct reports, span of control, and reporting chain."
  tags:
    - hr
    - workday
    - reporting
    - organizational-design
capability:
  exposes:
    - type: mcp
      namespace: hr-org
      port: 8080
      tools:
        - name: get-org-chart
          description: "Given a Workday worker ID, retrieve the org chart showing direct reports and reporting chain."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-supervisory-org"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: direct_reports_count
              type: string
              mapping: "$.organization.direct_reports_count"
            - name: manager_name
              type: string
              mapping: "$.organization.manager.display_name"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: organizations
          path: "/hilton/workers/{{worker_id}}/supervisoryOrganization"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-supervisory-org
              method: GET

Retrieves open hotel associate job requisitions and candidate pipeline counts from Workday Recruiting for a specified property or department, for talent acquisition reporting.

naftiko: "0.5"
info:
  label: "Workday Recruiting Pipeline Status"
  description: "Retrieves open hotel associate job requisitions and candidate pipeline counts from Workday Recruiting for a specified property or department, for talent acquisition reporting."
  tags:
    - hr
    - recruiting
    - workday
    - talent-acquisition
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: hr-recruiting
      port: 8080
      tools:
        - name: get-recruiting-pipeline
          description: "Given a Workday department or property ID, retrieve all open job requisitions and their candidate counts. Use for weekly talent acquisition reviews and hiring manager status updates."
          inputParameters:
            - name: department_id
              in: body
              type: string
              description: "The Workday department ID or property organizational unit to check."
          call: "workday-rec.list-requisitions"
          with:
            department_id: "{{department_id}}"
          outputParameters:
            - name: requisitions
              type: array
              mapping: "$.data"
              items:
                - name: req_id
                  type: string
                  mapping: "$.id"
                - name: job_title
                  type: string
                  mapping: "$.jobTitle"
                - name: status
                  type: string
                  mapping: "$.status"
                - name: candidate_count
                  type: string
                  mapping: "$.candidateCount"
  consumes:
    - type: http
      namespace: workday-rec
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/recruiting/v3"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/jobRequisitions"
          inputParameters:
            - name: department_id
              in: query
          operations:
            - name: list-requisitions
              method: GET

When a hotel associate changes roles in Workday (e.g., front desk to assistant manager), creates a ServiceNow access update request and notifies the new manager via Teams.

naftiko: "0.5"
info:
  label: "Workday Role Change Provisioning"
  description: "When a hotel associate changes roles in Workday (e.g., front desk to assistant manager), creates a ServiceNow access update request and notifies the new manager via Teams."
  tags:
    - hr
    - access-management
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-role-change
      port: 8080
      tools:
        - name: provision-role-change
          description: "Given a Workday employee ID, new role, and effective date, create a ServiceNow access-update request and notify the new manager in Teams. Use for promotions and inter-property transfers."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the associate changing roles."
            - name: new_role
              in: body
              type: string
              description: "The new job title, e.g. Assistant Front Office Manager."
            - name: effective_date
              in: body
              type: string
              description: "The effective date of the role change in YYYY-MM-DD format."
            - name: new_manager_upn
              in: body
              type: string
              description: "The Microsoft 365 UPN of the new manager."
          steps:
            - name: get-worker
              type: call
              call: "workday-rc.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-access-request
              type: call
              call: "servicenow-rc.create-incident"
              with:
                short_description: "Access update: {{get-worker.display_name}} moving to {{new_role}}"
                category: "access_management"
            - name: notify-manager
              type: call
              call: "msteams-rc.send-message"
              with:
                recipient_upn: "{{new_manager_upn}}"
                message: "{{get-worker.display_name}} will join your team as {{new_role}} on {{effective_date}}. Access update ticket: {{create-access-request.number}}."
  consumes:
    - type: http
      namespace: workday-rc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/hilton/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow-rc
      baseUri: "https://hilton.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-rc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves an associate's time off balances from Workday including vacation, sick leave, and personal days remaining.

naftiko: "0.5"
info:
  label: "Workday Time Off Balance Lookup"
  description: "Retrieves an associate's time off balances from Workday including vacation, sick leave, and personal days remaining."
  tags:
    - hr
    - workday
    - employee-experience
capability:
  exposes:
    - type: mcp
      namespace: hr-self-service
      port: 8080
      tools:
        - name: get-time-off-balance
          description: "Given a Workday employee ID, retrieve current time off balances."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-time-off-balance"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: vacation_hours
              type: string
              mapping: "$.balances[0].balance"
            - name: sick_hours
              type: string
              mapping: "$.balances[1].balance"
            - name: personal_hours
              type: string
              mapping: "$.balances[2].balance"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: time-off
          path: "/hilton/workers/{{worker_id}}/timeOffBalances"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-time-off-balance
              method: GET

Pulls YouTube channel analytics for Hilton's brand channels including views, watch time, subscriber growth, and top videos, then posts a digest to the marketing Teams channel.

naftiko: "0.5"
info:
  label: "YouTube Brand Channel Analytics Digest"
  description: "Pulls YouTube channel analytics for Hilton's brand channels including views, watch time, subscriber growth, and top videos, then posts a digest to the marketing Teams channel."
  tags:
    - marketing
    - youtube
    - microsoft-teams
    - social-media
capability:
  exposes:
    - type: mcp
      namespace: video-marketing
      port: 8080
      tools:
        - name: generate-youtube-digest
          description: "Given a YouTube channel ID, compile weekly analytics and post to Teams."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The YouTube channel ID."
          steps:
            - name: get-analytics
              type: call
              call: "youtube.get-channel-analytics"
              with:
                channel_id: "{{channel_id}}"
                period: "last_7_days"
            - name: post-digest
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "content-marketing"
                message: "YouTube Weekly Digest: Views: {{get-analytics.rows[0][0]}}, Watch Time (hrs): {{get-analytics.rows[0][1]}}, New Subscribers: {{get-analytics.rows[0][2]}}"
  consumes:
    - type: http
      namespace: youtube
      baseUri: "https://youtubeanalytics.googleapis.com/v2"
      authentication:
        type: bearer
        token: "$secrets.youtube_token"
      resources:
        - name: reports
          path: "/reports"
          operations:
            - name: get-channel-analytics
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves guest support ticket details and history from Zendesk for a given ticket ID or guest email, surfacing status, priority, and agent assignment.

naftiko: "0.5"
info:
  label: "Zendesk Guest Support Ticket Lookup"
  description: "Retrieves guest support ticket details and history from Zendesk for a given ticket ID or guest email, surfacing status, priority, and agent assignment."
  tags:
    - customer-service
    - zendesk
    - guest-experience
    - hospitality
capability:
  exposes:
    - type: mcp
      namespace: guest-support
      port: 8080
      tools:
        - name: get-support-ticket
          description: "Given a Zendesk ticket ID, retrieve ticket details including status, priority, and conversation history."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
            - name: assignee
              type: string
              mapping: "$.ticket.assignee_id"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://hilton.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

Enriches corporate sales prospect records with company and contact data from ZoomInfo, updating Salesforce accounts with firmographic details.

naftiko: "0.5"
info:
  label: "ZoomInfo Prospect Enrichment"
  description: "Enriches corporate sales prospect records with company and contact data from ZoomInfo, updating Salesforce accounts with firmographic details."
  tags:
    - sales
    - zoominfo
    - salesforce
    - data-enrichment
capability:
  exposes:
    - type: mcp
      namespace: sales-enablement
      port: 8080
      tools:
        - name: enrich-prospect
          description: "Given a company domain, retrieve firmographic data from ZoomInfo and update the Salesforce account."
          inputParameters:
            - name: company_domain
              in: body
              type: string
              description: "The prospect company domain."
            - name: sf_account_id
              in: body
              type: string
              description: "The Salesforce account ID to update."
          steps:
            - name: get-company
              type: call
              call: "zoominfo.search-company"
              with:
                domain: "{{company_domain}}"
            - name: update-account
              type: call
              call: "salesforce.update-account"
              with:
                account_id: "{{sf_account_id}}"
                fields:
                  NumberOfEmployees: "{{get-company.employeeCount}}"
                  AnnualRevenue: "{{get-company.revenue}}"
                  Industry: "{{get-company.industry}}"
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: companies
          path: "/search/company"
          operations:
            - name: search-company
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hilton.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: update-account
              method: PATCH