Hyatt Capabilities
Naftiko 0.5 capability definitions for Hyatt - 100 capabilities showing integration workflows and service orchestrations.
Retrieves booking funnel conversion data from Adobe Analytics for the Hyatt.com website, returning drop-off rates at each step.
naftiko: "0.5"
info:
label: "Adobe Analytics Booking Funnel Reporter"
description: "Retrieves booking funnel conversion data from Adobe Analytics for the Hyatt.com website, returning drop-off rates at each step."
tags:
- marketing
- analytics
- adobe-analytics
capability:
exposes:
- type: mcp
namespace: booking-funnel
port: 8080
tools:
- name: get-funnel-data
description: "Retrieve booking funnel metrics from Adobe Analytics."
inputParameters:
- name: report_suite_id
in: body
type: string
description: "The Adobe Analytics report suite ID."
- name: date_range
in: body
type: string
description: "Date range in YYYY-MM-DD/YYYY-MM-DD format."
call: "adobe-analytics.get-report"
with:
rsid: "{{report_suite_id}}"
date_range: "{{date_range}}"
outputParameters:
- name: search_to_select
type: string
mapping: "$.report.data.rows[0].value"
- name: select_to_checkout
type: string
mapping: "$.report.data.rows[1].value"
- name: checkout_to_confirm
type: string
mapping: "$.report.data.rows[2].value"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/{{rsid}}/reports"
inputParameters:
- name: rsid
in: path
operations:
- name: get-report
method: POST
Pulls approved time entries from Workday and syncs them to ADP for payroll processing, then confirms the sync via Microsoft Teams.
naftiko: "0.5"
info:
label: "ADP Payroll Integration Sync"
description: "Pulls approved time entries from Workday and syncs them to ADP for payroll processing, then confirms the sync via Microsoft Teams."
tags:
- hr
- payroll
- workday
- adp
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: payroll-sync
port: 8080
tools:
- name: sync-time-to-payroll
description: "Sync Workday time entries to ADP payroll and confirm via Teams."
inputParameters:
- name: pay_period
in: body
type: string
description: "Pay period identifier (e.g., 2026-03-15)."
- name: property_code
in: body
type: string
description: "The Hyatt property code."
steps:
- name: get-time-entries
type: call
call: "workday.get-time-entries"
with:
pay_period: "{{pay_period}}"
location: "{{property_code}}"
- name: submit-to-adp
type: call
call: "adp.submit-payroll"
with:
pay_period: "{{pay_period}}"
entries: "{{get-time-entries.entries}}"
- name: confirm-sync
type: call
call: "msteams.send-message"
with:
channel_id: "hr_payroll"
text: "Payroll sync complete for {{property_code}}, period {{pay_period}}: {{submit-to-adp.employee_count}} employees processed."
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-entries
path: "/time/entries"
inputParameters:
- name: pay_period
in: query
- name: location
in: query
operations:
- name: get-time-entries
method: GET
- type: http
namespace: adp
baseUri: "https://api.adp.com/hr/v2"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/payroll/payroll-processing"
operations:
- name: submit-payroll
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the status of a guest service request from the ALICE hospitality operations platform.
naftiko: "0.5"
info:
label: "ALICE Guest Request Status Lookup"
description: "Retrieves the status of a guest service request from the ALICE hospitality operations platform."
tags:
- guest-services
- operations
- alice
capability:
exposes:
- type: mcp
namespace: guest-requests
port: 8080
tools:
- name: get-request-status
description: "Look up a guest service request status."
inputParameters:
- name: request_id
in: body
type: string
description: "The ALICE request ID."
call: "alice.get-request"
with:
id: "{{request_id}}"
outputParameters:
- name: status
type: string
mapping: "$.request.status"
- name: assigned_to
type: string
mapping: "$.request.assignee"
- name: room_number
type: string
mapping: "$.request.roomNumber"
consumes:
- type: http
namespace: alice
baseUri: "https://api.aliceapp.com/v1"
authentication:
type: bearer
token: "$secrets.alice_token"
resources:
- name: requests
path: "/requests/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-request
method: GET
Retrieves a Hyatt employee's Azure AD profile, returning display name, job title, department, and office location.
naftiko: "0.5"
info:
label: "Azure Active Directory User Lookup"
description: "Retrieves a Hyatt employee's Azure AD profile, returning display name, job title, department, and office location."
tags:
- it-operations
- identity
- azure-active-directory
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-ad-user
description: "Look up an employee in Azure Active Directory by UPN."
inputParameters:
- name: user_upn
in: body
type: string
description: "The user principal name (email) of the employee."
call: "azuread.get-user"
with:
user_upn: "{{user_upn}}"
outputParameters:
- name: display_name
type: string
mapping: "$.displayName"
- name: job_title
type: string
mapping: "$.jobTitle"
- name: department
type: string
mapping: "$.department"
- name: office_location
type: string
mapping: "$.officeLocation"
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_upn}}"
inputParameters:
- name: user_upn
in: path
operations:
- name: get-user
method: GET
Retrieves the latest build status from Azure DevOps for a Hyatt application pipeline, returning build result, duration, and triggered-by information.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status Checker"
description: "Retrieves the latest build status from Azure DevOps for a Hyatt application pipeline, returning build result, duration, and triggered-by information."
tags:
- it-operations
- cicd
- azure-devops
capability:
exposes:
- type: mcp
namespace: build-status
port: 8080
tools:
- name: get-build-status
description: "Check the latest Azure DevOps build status for a pipeline."
inputParameters:
- name: project
in: body
type: string
description: "The Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "The pipeline definition ID."
call: "azdevops.get-latest-build"
with:
project: "{{project}}"
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: result
type: string
mapping: "$.value[0].result"
- name: status
type: string
mapping: "$.value[0].status"
- name: triggered_by
type: string
mapping: "$.value[0].requestedBy.displayName"
consumes:
- type: http
namespace: azdevops
baseUri: "https://dev.azure.com/hyatt"
authentication:
type: basic
username: ""
password: "$secrets.azdevops_pat"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds"
inputParameters:
- name: project
in: path
- name: definitions
in: query
value: "{{pipeline_id}}"
- name: $top
in: query
value: "1"
- name: api-version
in: query
value: "7.0"
operations:
- name: get-latest-build
method: GET
Processes banquet event orders by creating the BEO in the catering system, generating a purchase order in SAP for food and beverage, and notifying the events team via Slack.
naftiko: "0.5"
info:
label: "Banquet Event Order Processor"
description: "Processes banquet event orders by creating the BEO in the catering system, generating a purchase order in SAP for food and beverage, and notifying the events team via Slack."
tags:
- events
- catering
- sap
- slack
capability:
exposes:
- type: mcp
namespace: banquet-orders
port: 8080
tools:
- name: process-beo
description: "Process a banquet event order."
inputParameters:
- name: event_name
in: body
type: string
description: "The event name."
- name: property_code
in: body
type: string
description: "The property code."
- name: guest_count
in: body
type: integer
description: "Expected guest count."
- name: menu_code
in: body
type: string
description: "Selected menu package code."
steps:
- name: create-beo
type: call
call: "catering.create-beo"
with:
event_name: "{{event_name}}"
property: "{{property_code}}"
covers: "{{guest_count}}"
menu: "{{menu_code}}"
- name: create-fb-po
type: call
call: "sap.create-purchase-order"
with:
property: "{{property_code}}"
category: "food_and_beverage"
beo_ref: "{{create-beo.beo_number}}"
covers: "{{guest_count}}"
- name: notify-events-team
type: call
call: "slack.post-message"
with:
channel: "property-{{property_code}}-events"
text: "New BEO: {{event_name}} ({{guest_count}} covers). BEO#: {{create-beo.beo_number}}. F&B PO: {{create-fb-po.po_number}}."
consumes:
- type: http
namespace: catering
baseUri: "https://catering.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.catering_token"
resources:
- name: beos
path: "/beos"
operations:
- name: create-beo
method: POST
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/ZMM_PO_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/PurchaseOrderSet"
operations:
- name: create-purchase-order
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Uploads a property compliance document to the designated Box folder and returns the shared link for audit purposes.
naftiko: "0.5"
info:
label: "Box Document Archive Uploader"
description: "Uploads a property compliance document to the designated Box folder and returns the shared link for audit purposes."
tags:
- documents
- compliance
- box
capability:
exposes:
- type: mcp
namespace: document-archive
port: 8080
tools:
- name: upload-to-box
description: "Upload a document to Box and return a shared link."
inputParameters:
- name: folder_id
in: body
type: string
description: "The Box folder ID for the property's compliance documents."
- name: file_name
in: body
type: string
description: "Name of the file to upload."
- name: file_content
in: body
type: string
description: "Base64-encoded file content."
call: "box.upload-file"
with:
folder_id: "{{folder_id}}"
file_name: "{{file_name}}"
content: "{{file_content}}"
outputParameters:
- name: file_id
type: string
mapping: "$.entries[0].id"
- name: shared_link
type: string
mapping: "$.entries[0].shared_link.url"
consumes:
- type: http
namespace: box
baseUri: "https://upload.box.com/api/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/content"
operations:
- name: upload-file
method: POST
Queries Cloudflare for recent WAF events targeting Hyatt web properties, returning blocked requests, attack types, and source IPs.
naftiko: "0.5"
info:
label: "Cloudflare WAF Event Monitor"
description: "Queries Cloudflare for recent WAF events targeting Hyatt web properties, returning blocked requests, attack types, and source IPs."
tags:
- security
- it-operations
- cloudflare
capability:
exposes:
- type: mcp
namespace: waf-monitoring
port: 8080
tools:
- name: get-waf-events
description: "Retrieve recent Cloudflare WAF events for Hyatt domains."
inputParameters:
- name: zone_id
in: body
type: string
description: "The Cloudflare zone ID."
call: "cloudflare.get-firewall-events"
with:
zone_id: "{{zone_id}}"
outputParameters:
- name: events
type: string
mapping: "$.result"
- name: total_blocked
type: string
mapping: "$.result_info.total_count"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: firewall-events
path: "/zones/{{zone_id}}/security/events"
inputParameters:
- name: zone_id
in: path
operations:
- name: get-firewall-events
method: GET
When a SAP Concur expense report is submitted by a hotel employee, retrieves the report details and notifies the approver via Microsoft Teams with a link to review.
naftiko: "0.5"
info:
label: "Concur Expense Report Approval Notifier"
description: "When a SAP Concur expense report is submitted by a hotel employee, retrieves the report details and notifies the approver via Microsoft Teams with a link to review."
tags:
- finance
- expenses
- sap-concur
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: expense-approval
port: 8080
tools:
- name: notify-expense-approval
description: "Fetch Concur expense report and notify the approver via Teams."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
steps:
- name: get-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{report_id}}"
- name: notify-approver
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-report.approver_email}}"
text: "Expense report pending: {{get-report.employee_name}} submitted ${{get-report.total_amount}} ({{get-report.report_name}}). Review: {{get-report.approval_url}}"
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/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Creates a new knowledge base article in Confluence for property operations procedures and returns the page URL.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Article Creator"
description: "Creates a new knowledge base article in Confluence for property operations procedures and returns the page URL."
tags:
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: create-kb-article
description: "Create a Confluence knowledge base article."
inputParameters:
- name: space_key
in: body
type: string
description: "The Confluence space key."
- name: title
in: body
type: string
description: "Article title."
- name: body
in: body
type: string
description: "Article body content in HTML."
call: "confluence.create-page"
with:
space_key: "{{space_key}}"
title: "{{title}}"
body: "{{body}}"
outputParameters:
- name: page_url
type: string
mapping: "$._links.webui"
- name: page_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: confluence
baseUri: "https://hyatt.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Sets up new corporate travel accounts by creating a Salesforce account, provisioning negotiated rates in Opera PMS, and sending welcome materials via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Corporate Travel Account Setup Orchestrator"
description: "Sets up new corporate travel accounts by creating a Salesforce account, provisioning negotiated rates in Opera PMS, and sending welcome materials via Microsoft Outlook."
tags:
- sales
- corporate-travel
- salesforce
- oracle-cloud
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: corporate-accounts
port: 8080
tools:
- name: setup-corporate-account
description: "Set up a new corporate travel account."
inputParameters:
- name: company_name
in: body
type: string
description: "Company name."
- name: contact_email
in: body
type: string
description: "Primary contact email."
- name: negotiated_rate
in: body
type: number
description: "Negotiated room rate."
steps:
- name: create-sf-account
type: call
call: "salesforce.create-account"
with:
name: "{{company_name}}"
type: "corporate_travel"
contact_email: "{{contact_email}}"
- name: provision-rates
type: call
call: "opera.create-rate-plan"
with:
company_name: "{{company_name}}"
rate: "{{negotiated_rate}}"
sf_account_id: "{{create-sf-account.id}}"
- name: send-welcome
type: call
call: "outlook.send-email"
with:
to: "{{contact_email}}"
subject: "Welcome to Hyatt Corporate Travel Program"
body: "{{company_name}}, your corporate travel account is active. Account ID: {{create-sf-account.id}}. Rate plan: {{provision-rates.rate_code}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: rate-plans
path: "/rate-plans"
operations:
- name: create-rate-plan
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Pulls event attendee lists from Cvent and syncs them to a Google Sheet for property-level event coordination.
naftiko: "0.5"
info:
label: "Cvent Event Attendee Sync"
description: "Pulls event attendee lists from Cvent and syncs them to a Google Sheet for property-level event coordination."
tags:
- events
- cvent
- google-sheets
capability:
exposes:
- type: mcp
namespace: event-attendees
port: 8080
tools:
- name: sync-attendees
description: "Pull Cvent attendees and sync to Google Sheets."
inputParameters:
- name: event_id
in: body
type: string
description: "The Cvent event ID."
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID."
steps:
- name: get-attendees
type: call
call: "cvent.get-attendees"
with:
event_id: "{{event_id}}"
- name: write-to-sheet
type: call
call: "gsheets.update-range"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "Attendees!A2:D"
values: "{{get-attendees.attendee_list}}"
consumes:
- type: http
namespace: cvent
baseUri: "https://api.cvent.com/v1"
authentication:
type: bearer
token: "$secrets.cvent_token"
resources:
- name: attendees
path: "/events/{{event_id}}/attendees"
inputParameters:
- name: event_id
in: path
operations:
- name: get-attendees
method: GET
- type: http
namespace: gsheets
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: update-range
method: PUT
Queries Datadog for infrastructure health metrics of a Hyatt property's on-premise systems, returning CPU utilization, memory usage, and active alerts.
naftiko: "0.5"
info:
label: "Datadog Property Infrastructure Monitor"
description: "Queries Datadog for infrastructure health metrics of a Hyatt property's on-premise systems, returning CPU utilization, memory usage, and active alerts."
tags:
- it-operations
- monitoring
- datadog
capability:
exposes:
- type: mcp
namespace: infra-monitoring
port: 8080
tools:
- name: get-property-health
description: "Retrieve infrastructure health metrics for a property from Datadog."
inputParameters:
- name: property_code
in: body
type: string
description: "The Hyatt property code."
call: "datadog.query-metrics"
with:
query: "avg:system.cpu.user{property:{{property_code}}}"
outputParameters:
- name: cpu_utilization
type: string
mapping: "$.series[0].pointlist[-1][1]"
- name: active_alerts
type: string
mapping: "$.alerts_count"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: query
in: query
operations:
- name: query-metrics
method: GET
Retrieves current occupancy from OPERA, checks competitor rates via a rate-shopping API, and updates room rates in OPERA to optimize RevPAR.
naftiko: "0.5"
info:
label: "Dynamic Pricing Rate Adjuster"
description: "Retrieves current occupancy from OPERA, checks competitor rates via a rate-shopping API, and updates room rates in OPERA to optimize RevPAR."
tags:
- revenue
- pricing
- oracle
capability:
exposes:
- type: mcp
namespace: dynamic-pricing
port: 8080
tools:
- name: adjust-rates
description: "Evaluate occupancy and competitor data and adjust room rates for a property."
inputParameters:
- name: property_code
in: body
type: string
description: "The Hyatt property code."
- name: rate_date
in: body
type: string
description: "Target date for rate adjustment in YYYY-MM-DD format."
steps:
- name: get-occupancy
type: call
call: "opera.get-occupancy"
with:
property_code: "{{property_code}}"
date: "{{rate_date}}"
- name: get-comp-rates
type: call
call: "rateshopper.get-rates"
with:
market: "{{property_code}}"
date: "{{rate_date}}"
- name: update-rate
type: call
call: "opera.update-rate"
with:
property_code: "{{property_code}}"
date: "{{rate_date}}"
occupancy: "{{get-occupancy.occupancy_pct}}"
comp_avg_rate: "{{get-comp-rates.average_rate}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: occupancy
path: "/properties/{{property_code}}/occupancy"
inputParameters:
- name: property_code
in: path
- name: date
in: query
operations:
- name: get-occupancy
method: GET
- name: rates
path: "/properties/{{property_code}}/rates"
inputParameters:
- name: property_code
in: path
operations:
- name: update-rate
method: PUT
- type: http
namespace: rateshopper
baseUri: "https://api.rateshopper.hyatt.com/v1"
authentication:
type: bearer
token: "$secrets.rateshopper_token"
resources:
- name: market-rates
path: "/markets/{{market}}/rates"
inputParameters:
- name: market
in: path
- name: date
in: query
operations:
- name: get-rates
method: GET
Retrieves real user monitoring data from Dynatrace for the Hyatt booking website, returning page load times, user actions, and error counts.
naftiko: "0.5"
info:
label: "Dynatrace Real User Monitoring Retriever"
description: "Retrieves real user monitoring data from Dynatrace for the Hyatt booking website, returning page load times, user actions, and error counts."
tags:
- it-operations
- monitoring
- dynatrace
capability:
exposes:
- type: mcp
namespace: rum-monitoring
port: 8080
tools:
- name: get-rum-data
description: "Retrieve real user monitoring metrics from Dynatrace."
inputParameters:
- name: application_id
in: body
type: string
description: "The Dynatrace application ID."
call: "dynatrace.get-user-actions"
with:
application_id: "{{application_id}}"
outputParameters:
- name: avg_load_time
type: string
mapping: "$.userActions.averageLoadTime"
- name: total_actions
type: string
mapping: "$.userActions.totalCount"
- name: error_count
type: string
mapping: "$.userActions.errorCount"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://hyatt.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: user-actions
path: "/userSessionQueryLanguage/table"
inputParameters:
- name: query
in: query
value: "SELECT AVG(duration), COUNT(*), COUNT(IF(type='ERROR',1)) FROM usersession WHERE applicationId='{{application_id}}'"
operations:
- name: get-user-actions
method: GET
Retrieves an employee's schedule from Workday and returns their upcoming shifts, department, and property assignment.
naftiko: "0.5"
info:
label: "Employee Shift Scheduler"
description: "Retrieves an employee's schedule from Workday and returns their upcoming shifts, department, and property assignment."
tags:
- hr
- scheduling
- workday
capability:
exposes:
- type: mcp
namespace: shift-scheduling
port: 8080
tools:
- name: get-employee-schedule
description: "Retrieve upcoming shift schedule for a hotel employee by worker ID."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-schedule"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: shifts
type: string
mapping: "$.scheduleEntries"
- name: department
type: string
mapping: "$.department"
- name: property
type: string
mapping: "$.location"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: schedules
path: "/workers/{{worker_id}}/schedule"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-schedule
method: GET
Pulls campaign performance data from Facebook Ads for Hyatt property marketing campaigns, returning impressions, clicks, spend, and ROAS.
naftiko: "0.5"
info:
label: "Facebook Marketing Campaign Reporter"
description: "Pulls campaign performance data from Facebook Ads for Hyatt property marketing campaigns, returning impressions, clicks, spend, and ROAS."
tags:
- marketing
- advertising
- facebook
capability:
exposes:
- type: mcp
namespace: fb-campaigns
port: 8080
tools:
- name: get-campaign-performance
description: "Retrieve Facebook Ads campaign performance metrics."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Facebook Ads campaign ID."
call: "facebook.get-campaign-insights"
with:
campaign_id: "{{campaign_id}}"
outputParameters:
- name: impressions
type: string
mapping: "$.data[0].impressions"
- name: clicks
type: string
mapping: "$.data[0].clicks"
- name: spend
type: string
mapping: "$.data[0].spend"
- name: roas
type: string
mapping: "$.data[0].purchase_roas[0].value"
consumes:
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v17.0"
authentication:
type: bearer
token: "$secrets.facebook_ads_token"
resources:
- name: campaign-insights
path: "/{{campaign_id}}/insights"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-insights
method: GET
When food and beverage inventory drops below threshold in the POS system, generates a SAP purchase requisition, emails the supplier via Microsoft Outlook, and notifies the F&B director via Teams.
naftiko: "0.5"
info:
label: "F&B Inventory Reorder Orchestrator"
description: "When food and beverage inventory drops below threshold in the POS system, generates a SAP purchase requisition, emails the supplier via Microsoft Outlook, and notifies the F&B director via Teams."
tags:
- procurement
- food-and-beverage
- oracle
- sap
- microsoft-outlook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fb-reorder
port: 8080
tools:
- name: trigger-reorder
description: "Trigger a food and beverage reorder workflow across SAP, Outlook, and Teams."
inputParameters:
- name: item_code
in: body
type: string
description: "The inventory item code."
- name: property_code
in: body
type: string
description: "The Hyatt property code."
- name: quantity_needed
in: body
type: string
description: "Quantity to reorder."
steps:
- name: get-item-details
type: call
call: "opera.get-inventory-item"
with:
item_code: "{{item_code}}"
property_code: "{{property_code}}"
- name: create-pr
type: call
call: "sap.create-purchase-requisition"
with:
material: "{{item_code}}"
quantity: "{{quantity_needed}}"
plant: "{{property_code}}"
vendor: "{{get-item-details.preferred_vendor}}"
- name: email-supplier
type: call
call: "outlook.send-email"
with:
to: "{{get-item-details.vendor_email}}"
subject: "Reorder Request: {{get-item-details.item_name}} for {{property_code}}"
body: "Please supply {{quantity_needed}} units of {{get-item-details.item_name}}. PR: {{create-pr.pr_number}}"
- name: notify-director
type: call
call: "msteams.send-message"
with:
channel_id: "fb_operations_{{property_code}}"
text: "Reorder initiated: {{get-item-details.item_name}} x{{quantity_needed}}. PR: {{create-pr.pr_number}}. Supplier: {{get-item-details.preferred_vendor}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: inventory
path: "/properties/{{property_code}}/inventory/{{item_code}}"
inputParameters:
- name: property_code
in: path
- name: item_code
in: path
operations:
- name: get-inventory-item
method: GET
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-requisitions
path: "/A_PurchaseRequisition"
operations:
- name: create-purchase-requisition
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves website traffic metrics from Google Analytics for a Hyatt property's booking page, returning sessions, conversion rate, and top referral sources.
naftiko: "0.5"
info:
label: "Google Analytics Property Traffic Reporter"
description: "Retrieves website traffic metrics from Google Analytics for a Hyatt property's booking page, returning sessions, conversion rate, and top referral sources."
tags:
- marketing
- analytics
- google-analytics
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-property-traffic
description: "Get web traffic data for a property's booking page from Google Analytics."
inputParameters:
- name: property_id
in: body
type: string
description: "The Google Analytics property ID."
- name: date_range
in: body
type: string
description: "Date range, e.g., last_7_days, last_30_days."
call: "ga.get-report"
with:
property_id: "{{property_id}}"
date_range: "{{date_range}}"
outputParameters:
- name: sessions
type: string
mapping: "$.rows[0].metricValues[0].value"
- name: conversion_rate
type: string
mapping: "$.rows[0].metricValues[1].value"
- name: top_sources
type: string
mapping: "$.rows[*].dimensionValues[0].value"
consumes:
- type: http
namespace: ga
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
Searches for documents in the Hyatt shared Google Drive by name or keyword and returns matching file names, types, and direct links.
naftiko: "0.5"
info:
label: "Google Drive Document Finder"
description: "Searches for documents in the Hyatt shared Google Drive by name or keyword and returns matching file names, types, and direct links."
tags:
- documents
- google-drive
capability:
exposes:
- type: mcp
namespace: gdrive-search
port: 8080
tools:
- name: search-documents
description: "Search for documents in the Hyatt shared Google Drive."
inputParameters:
- name: search_query
in: body
type: string
description: "Search query for file names or content."
call: "gdrive.search-files"
with:
query: "{{search_query}}"
outputParameters:
- name: files
type: string
mapping: "$.files"
- name: result_count
type: string
mapping: "$.files.length"
consumes:
- type: http
namespace: gdrive
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files"
inputParameters:
- name: q
in: query
value: "name contains '{{query}}'"
operations:
- name: search-files
method: GET
Generates driving directions from a guest's location to a Hyatt property using Google Maps Directions API.
naftiko: "0.5"
info:
label: "Google Maps Property Directions Generator"
description: "Generates driving directions from a guest's location to a Hyatt property using Google Maps Directions API."
tags:
- guest-services
- hospitality
- google-maps
capability:
exposes:
- type: mcp
namespace: directions
port: 8080
tools:
- name: get-directions-to-property
description: "Get driving directions to a Hyatt property from a starting address."
inputParameters:
- name: origin
in: body
type: string
description: "Starting address or coordinates."
- name: property_address
in: body
type: string
description: "Hyatt property address."
call: "gmaps.get-directions"
with:
origin: "{{origin}}"
destination: "{{property_address}}"
outputParameters:
- name: distance
type: string
mapping: "$.routes[0].legs[0].distance.text"
- name: duration
type: string
mapping: "$.routes[0].legs[0].duration.text"
- name: steps
type: string
mapping: "$.routes[0].legs[0].steps"
consumes:
- type: http
namespace: gmaps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apiKey
name: "key"
in: query
value: "$secrets.google_maps_api_key"
resources:
- name: directions
path: "/directions/json"
inputParameters:
- name: origin
in: query
- name: destination
in: query
operations:
- name: get-directions
method: GET
Reconciles group billing by pulling folios from Opera PMS, comparing against the Salesforce contract, and generating the final invoice in SAP.
naftiko: "0.5"
info:
label: "Group Billing Reconciliation Pipeline"
description: "Reconciles group billing by pulling folios from Opera PMS, comparing against the Salesforce contract, and generating the final invoice in SAP."
tags:
- finance
- group-bookings
- oracle-cloud
- salesforce
- sap
capability:
exposes:
- type: mcp
namespace: group-billing
port: 8080
tools:
- name: reconcile-group-billing
description: "Reconcile group booking billing."
inputParameters:
- name: group_block_id
in: body
type: string
description: "The group block ID in Opera."
- name: sf_opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
steps:
- name: get-group-folios
type: call
call: "opera.get-group-folios"
with:
block_id: "{{group_block_id}}"
- name: get-contract-terms
type: call
call: "salesforce.get-opportunity"
with:
id: "{{sf_opportunity_id}}"
- name: generate-invoice
type: call
call: "sap.create-invoice"
with:
customer: "{{get-contract-terms.Account.Name}}"
amount: "{{get-group-folios.total_charges}}"
contract_ref: "{{sf_opportunity_id}}"
room_nights: "{{get-group-folios.total_room_nights}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: group-folios
path: "/group-blocks/{{block_id}}/folios"
inputParameters:
- name: block_id
in: path
operations:
- name: get-group-folios
method: GET
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/ZFI_INVOICE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/InvoiceSet"
operations:
- name: create-invoice
method: POST
When a group reservation is confirmed in OPERA, creates a Cvent event shell, generates a Salesforce opportunity, and posts a summary to the sales team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Group Booking Event Coordinator"
description: "When a group reservation is confirmed in OPERA, creates a Cvent event shell, generates a Salesforce opportunity, and posts a summary to the sales team's Microsoft Teams channel."
tags:
- reservations
- events
- oracle
- cvent
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: group-bookings
port: 8080
tools:
- name: coordinate-group-booking
description: "Orchestrate group booking setup across OPERA, Cvent, Salesforce, and Teams."
inputParameters:
- name: group_block_id
in: body
type: string
description: "The OPERA group block ID."
- name: event_name
in: body
type: string
description: "Name of the group event."
steps:
- name: get-group-block
type: call
call: "opera.get-group-block"
with:
block_id: "{{group_block_id}}"
- name: create-cvent-event
type: call
call: "cvent.create-event"
with:
title: "{{event_name}}"
start_date: "{{get-group-block.arrival_date}}"
end_date: "{{get-group-block.departure_date}}"
venue: "{{get-group-block.property_name}}"
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
name: "Group: {{event_name}} - {{get-group-block.property_name}}"
amount: "{{get-group-block.estimated_revenue}}"
close_date: "{{get-group-block.arrival_date}}"
- name: notify-sales
type: call
call: "msteams.send-message"
with:
channel_id: "sales_group_bookings"
text: "New group booking: {{event_name}} at {{get-group-block.property_name}}. Rooms: {{get-group-block.room_count}}. Est. revenue: {{get-group-block.estimated_revenue}}. Cvent: {{create-cvent-event.url}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: group-blocks
path: "/blocks/{{block_id}}"
inputParameters:
- name: block_id
in: path
operations:
- name: get-group-block
method: GET
- type: http
namespace: cvent
baseUri: "https://api.cvent.com/v1"
authentication:
type: bearer
token: "$secrets.cvent_token"
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes group sales RFPs by pulling availability from Opera PMS, generating a proposal in Salesforce, and sending the response via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Group Sales RFP Response Pipeline"
description: "Processes group sales RFPs by pulling availability from Opera PMS, generating a proposal in Salesforce, and sending the response via Microsoft Outlook."
tags:
- sales
- group-bookings
- oracle-cloud
- salesforce
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: rfp-response
port: 8080
tools:
- name: respond-to-rfp
description: "Generate and send an RFP response for group sales."
inputParameters:
- name: rfp_id
in: body
type: string
description: "The Cvent RFP ID."
- name: property_code
in: body
type: string
description: "The property code."
- name: dates
in: body
type: string
description: "Requested dates."
- name: room_nights
in: body
type: integer
description: "Requested room nights."
steps:
- name: check-availability
type: call
call: "opera.check-group-availability"
with:
property: "{{property_code}}"
dates: "{{dates}}"
rooms_needed: "{{room_nights}}"
- name: create-proposal
type: call
call: "salesforce.create-opportunity"
with:
name: "RFP {{rfp_id}} - {{property_code}}"
room_nights: "{{room_nights}}"
dates: "{{dates}}"
available_rooms: "{{check-availability.available}}"
- name: send-response
type: call
call: "outlook.send-email"
with:
to: "{{create-proposal.rfp_contact_email}}"
subject: "Hyatt {{property_code}} - RFP Response"
body: "We are pleased to propose {{check-availability.available}} rooms for your dates. Proposal ID: {{create-proposal.id}}."
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: availability
path: "/properties/{{property}}/group-availability"
inputParameters:
- name: property
in: path
operations:
- name: check-group-availability
method: POST
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Retrieves the check-in status of a guest reservation from Oracle Hospitality OPERA, including arrival time, room assignment, and special requests.
naftiko: "0.5"
info:
label: "Guest Check-In Status Lookup"
description: "Retrieves the check-in status of a guest reservation from Oracle Hospitality OPERA, including arrival time, room assignment, and special requests."
tags:
- reservations
- hospitality
- oracle
capability:
exposes:
- type: mcp
namespace: guest-checkin
port: 8080
tools:
- name: get-checkin-status
description: "Look up guest check-in status by confirmation number."
inputParameters:
- name: confirmation_number
in: body
type: string
description: "The reservation confirmation number."
call: "opera.get-checkin"
with:
confirmation_number: "{{confirmation_number}}"
outputParameters:
- name: status
type: string
mapping: "$.reservation.checkinStatus"
- name: room_number
type: string
mapping: "$.reservation.assignedRoom"
- name: special_requests
type: string
mapping: "$.reservation.specialRequests"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: checkins
path: "/reservations/{{confirmation_number}}/checkin"
inputParameters:
- name: confirmation_number
in: path
operations:
- name: get-checkin
method: GET
Resolves guest complaints by logging the issue in ALICE, offering loyalty points compensation via the loyalty platform, and alerting the GM via Microsoft Teams.
naftiko: "0.5"
info:
label: "Guest Complaint Resolution Orchestrator"
description: "Resolves guest complaints by logging the issue in ALICE, offering loyalty points compensation via the loyalty platform, and alerting the GM via Microsoft Teams."
tags:
- guest-experience
- complaint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: complaint-resolution
port: 8080
tools:
- name: resolve-complaint
description: "Orchestrate guest complaint resolution."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The reservation confirmation number."
- name: complaint_text
in: body
type: string
description: "The complaint description."
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: log-complaint
type: call
call: "alice.create-request"
with:
reservation: "{{reservation_id}}"
type: "complaint"
description: "{{complaint_text}}"
- name: offer-compensation
type: call
call: "loyalty.award-points"
with:
reservation_id: "{{reservation_id}}"
points: 5000
reason: "service_recovery"
- name: alert-gm
type: call
call: "msteams.send-message"
with:
channel_id: "property-{{property_code}}-leadership"
text: "Guest complaint for reservation {{reservation_id}}: {{complaint_text}}. ALICE ticket: {{log-complaint.request_id}}. 5000 points awarded as service recovery."
consumes:
- type: http
namespace: alice
baseUri: "https://api.aliceapp.com/v1"
authentication:
type: bearer
token: "$secrets.alice_token"
resources:
- name: requests
path: "/requests"
operations:
- name: create-request
method: POST
- type: http
namespace: loyalty
baseUri: "https://loyalty.hyatt.com/api/v2"
authentication:
type: bearer
token: "$secrets.loyalty_token"
resources:
- name: points
path: "/members/awards"
operations:
- name: award-points
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Provisions digital room keys by verifying the reservation in Opera PMS, generating the key in the lock management system, and sending the key via push notification.
naftiko: "0.5"
info:
label: "Guest Digital Key Provisioning Pipeline"
description: "Provisions digital room keys by verifying the reservation in Opera PMS, generating the key in the lock management system, and sending the key via push notification."
tags:
- guest-experience
- digital-key
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: digital-key
port: 8080
tools:
- name: provision-digital-key
description: "Provision a digital key for a guest."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The reservation confirmation number."
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: verify-reservation
type: call
call: "opera.get-reservation"
with:
property: "{{property_code}}"
reservation: "{{reservation_id}}"
- name: generate-key
type: call
call: "lock-system.create-key"
with:
room: "{{verify-reservation.room_number}}"
property: "{{property_code}}"
check_in: "{{verify-reservation.check_in}}"
check_out: "{{verify-reservation.check_out}}"
- name: send-key-notification
type: call
call: "push-service.send-notification"
with:
reservation_id: "{{reservation_id}}"
title: "Your Digital Key is Ready"
body: "Room {{verify-reservation.room_number}} is ready. Open the Hyatt app to access your digital key."
deep_link: "hyatt://digital-key/{{generate-key.key_id}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: reservations
path: "/properties/{{property}}/reservations/{{reservation}}"
inputParameters:
- name: property
in: path
- name: reservation
in: path
operations:
- name: get-reservation
method: GET
- type: http
namespace: lock-system
baseUri: "https://locks.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.lock_system_token"
resources:
- name: keys
path: "/keys"
operations:
- name: create-key
method: POST
- type: http
namespace: push-service
baseUri: "https://push.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.push_service_token"
resources:
- name: notifications
path: "/notifications"
operations:
- name: send-notification
method: POST
When a low-score guest survey arrives in Salesforce, opens a ServiceNow incident for guest recovery, notifies the GM via Microsoft Teams, and logs the case in Confluence.
naftiko: "0.5"
info:
label: "Guest Feedback Escalation Pipeline"
description: "When a low-score guest survey arrives in Salesforce, opens a ServiceNow incident for guest recovery, notifies the GM via Microsoft Teams, and logs the case in Confluence."
tags:
- guest-services
- feedback
- salesforce
- servicenow
- microsoft-teams
- confluence
capability:
exposes:
- type: mcp
namespace: guest-feedback
port: 8080
tools:
- name: escalate-feedback
description: "Escalate negative guest feedback across ServiceNow, Teams, and Confluence."
inputParameters:
- name: survey_id
in: body
type: string
description: "The Salesforce survey response ID."
steps:
- name: get-survey
type: call
call: "salesforce.get-survey"
with:
survey_id: "{{survey_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Guest recovery: {{get-survey.guest_name}} at {{get-survey.property_name}}"
priority: "2"
category: "guest_recovery"
description: "Score: {{get-survey.overall_score}}/10. Feedback: {{get-survey.comments}}"
- name: notify-gm
type: call
call: "msteams.send-message"
with:
channel_id: "gm_alerts_{{get-survey.property_code}}"
text: "Guest recovery needed: {{get-survey.guest_name}} scored {{get-survey.overall_score}}/10. Incident: {{create-incident.number}}"
- name: log-case
type: call
call: "confluence.create-page"
with:
space_key: "GUEST_RECOVERY"
title: "Recovery - {{get-survey.guest_name}} - {{get-survey.property_name}}"
body: "Survey score: {{get-survey.overall_score}}. Comments: {{get-survey.comments}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: surveys
path: "/sobjects/Survey_Response__c/{{survey_id}}"
inputParameters:
- name: survey_id
in: path
operations:
- name: get-survey
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyatt.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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: confluence
baseUri: "https://hyatt.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Resolves guest folio disputes by pulling the folio from Opera PMS, processing an adjustment, and sending a corrected statement via SendGrid.
naftiko: "0.5"
info:
label: "Guest Folio Dispute Resolution Pipeline"
description: "Resolves guest folio disputes by pulling the folio from Opera PMS, processing an adjustment, and sending a corrected statement via SendGrid."
tags:
- finance
- guest-services
- oracle-cloud
- sendgrid
capability:
exposes:
- type: mcp
namespace: folio-dispute
port: 8080
tools:
- name: resolve-folio-dispute
description: "Resolve a guest folio charge dispute."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The reservation confirmation number."
- name: disputed_charge_id
in: body
type: string
description: "The charge line item ID."
- name: guest_email
in: body
type: string
description: "Guest email address."
steps:
- name: get-folio
type: call
call: "opera.get-folio"
with:
reservation: "{{reservation_id}}"
- name: process-adjustment
type: call
call: "opera.post-adjustment"
with:
reservation: "{{reservation_id}}"
charge_id: "{{disputed_charge_id}}"
type: "credit"
- name: send-corrected-statement
type: call
call: "sendgrid.send-email"
with:
to: "{{guest_email}}"
template_id: "folio_correction"
dynamic_data:
reservation_id: "{{reservation_id}}"
adjustment_amount: "{{process-adjustment.credit_amount}}"
new_balance: "{{process-adjustment.new_balance}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: folios
path: "/reservations/{{reservation}}/folio"
inputParameters:
- name: reservation
in: path
operations:
- name: get-folio
method: GET
- name: adjustments
path: "/reservations/{{reservation}}/adjustments"
inputParameters:
- name: reservation
in: path
operations:
- name: post-adjustment
method: POST
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Manages guest lost and found items by creating a record in ALICE, matching against guest profiles in Opera PMS, and sending a notification to the guest via SendGrid.
naftiko: "0.5"
info:
label: "Guest Lost and Found Tracker"
description: "Manages guest lost and found items by creating a record in ALICE, matching against guest profiles in Opera PMS, and sending a notification to the guest via SendGrid."
tags:
- guest-services
- operations
- oracle-cloud
- sendgrid
capability:
exposes:
- type: mcp
namespace: lost-and-found
port: 8080
tools:
- name: log-lost-item
description: "Log a found item and attempt to match with a guest."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: item_description
in: body
type: string
description: "Description of the found item."
- name: room_number
in: body
type: string
description: "Room where item was found."
steps:
- name: create-lf-record
type: call
call: "alice.create-lost-found"
with:
property: "{{property_code}}"
item: "{{item_description}}"
room: "{{room_number}}"
- name: match-guest
type: call
call: "opera.get-recent-guest"
with:
property: "{{property_code}}"
room: "{{room_number}}"
- name: notify-guest
type: call
call: "sendgrid.send-email"
with:
to: "{{match-guest.email}}"
template_id: "lost_and_found"
dynamic_data:
guest_name: "{{match-guest.name}}"
item: "{{item_description}}"
property_name: "{{property_code}}"
reference: "{{create-lf-record.reference_id}}"
consumes:
- type: http
namespace: alice
baseUri: "https://api.aliceapp.com/v1"
authentication:
type: bearer
token: "$secrets.alice_token"
resources:
- name: lost-found
path: "/lost-and-found"
operations:
- name: create-lost-found
method: POST
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: guests
path: "/properties/{{property}}/rooms/{{room}}/recent-guest"
inputParameters:
- name: property
in: path
- name: room
in: path
operations:
- name: get-recent-guest
method: GET
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Sends post-stay surveys by pulling checkout data from Opera PMS, triggering a survey via Medallia, and syncing responses to Snowflake for analytics.
naftiko: "0.5"
info:
label: "Guest Post-Stay Survey Pipeline"
description: "Sends post-stay surveys by pulling checkout data from Opera PMS, triggering a survey via Medallia, and syncing responses to Snowflake for analytics."
tags:
- guest-experience
- survey
- oracle-cloud
- snowflake
capability:
exposes:
- type: mcp
namespace: post-stay-survey
port: 8080
tools:
- name: send-post-stay-survey
description: "Send a post-stay survey to a checked-out guest."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The reservation confirmation number."
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: get-checkout-data
type: call
call: "opera.get-checkout"
with:
property: "{{property_code}}"
reservation: "{{reservation_id}}"
- name: trigger-survey
type: call
call: "medallia.send-survey"
with:
email: "{{get-checkout-data.guest_email}}"
guest_name: "{{get-checkout-data.guest_name}}"
property: "{{property_code}}"
stay_dates: "{{get-checkout-data.check_in}} - {{get-checkout-data.check_out}}"
- name: log-to-analytics
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO survey_sends (reservation_id, property_code, guest_email, survey_id, sent_at) VALUES ('{{reservation_id}}', '{{property_code}}', '{{get-checkout-data.guest_email}}', '{{trigger-survey.survey_id}}', CURRENT_TIMESTAMP())"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: checkouts
path: "/properties/{{property}}/reservations/{{reservation}}/checkout"
inputParameters:
- name: property
in: path
- name: reservation
in: path
operations:
- name: get-checkout
method: GET
- type: http
namespace: medallia
baseUri: "https://api.medallia.com/v1"
authentication:
type: bearer
token: "$secrets.medallia_token"
resources:
- name: surveys
path: "/surveys/send"
operations:
- name: send-survey
method: POST
- type: http
namespace: snowflake
baseUri: "https://hyatt.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
On new booking in Oracle Hospitality OPERA, creates a Salesforce contact record, provisions a loyalty profile update in the CRM, and sends a confirmation via WhatsApp.
naftiko: "0.5"
info:
label: "Guest Reservation Orchestrator"
description: "On new booking in Oracle Hospitality OPERA, creates a Salesforce contact record, provisions a loyalty profile update in the CRM, and sends a confirmation via WhatsApp."
tags:
- reservations
- hospitality
- oracle
- salesforce
- whatsapp
capability:
exposes:
- type: mcp
namespace: guest-reservations
port: 8080
tools:
- name: orchestrate-reservation
description: "Given a reservation ID, orchestrate guest record creation in Salesforce, loyalty update, and WhatsApp confirmation."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The OPERA reservation confirmation number."
- name: guest_email
in: body
type: string
description: "Guest email address for profile lookup."
steps:
- name: get-reservation
type: call
call: "opera.get-reservation"
with:
reservation_id: "{{reservation_id}}"
- name: upsert-contact
type: call
call: "salesforce.upsert-contact"
with:
email: "{{guest_email}}"
first_name: "{{get-reservation.guest_first_name}}"
last_name: "{{get-reservation.guest_last_name}}"
- name: send-confirmation
type: call
call: "whatsapp.send-message"
with:
phone: "{{get-reservation.guest_phone}}"
template: "reservation_confirmed"
parameters: "{{get-reservation.confirmation_number}},{{get-reservation.check_in_date}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: reservations
path: "/reservations/{{reservation_id}}"
inputParameters:
- name: reservation_id
in: path
operations:
- name: get-reservation
method: GET
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact"
operations:
- name: upsert-contact
method: PATCH
- type: http
namespace: whatsapp
baseUri: "https://graph.facebook.com/v17.0"
authentication:
type: bearer
token: "$secrets.whatsapp_token"
resources:
- name: messages
path: "/{{phone_number_id}}/messages"
inputParameters:
- name: phone_number_id
in: path
operations:
- name: send-message
method: POST
Automates room upgrades for eligible guests by checking loyalty tier, verifying availability in Opera PMS, and sending an upgrade notification via the mobile app push service.
naftiko: "0.5"
info:
label: "Guest Room Upgrade Automation"
description: "Automates room upgrades for eligible guests by checking loyalty tier, verifying availability in Opera PMS, and sending an upgrade notification via the mobile app push service."
tags:
- guest-experience
- loyalty
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: room-upgrade
port: 8080
tools:
- name: process-upgrade
description: "Automatically process a room upgrade for an eligible guest."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The reservation confirmation number."
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: check-loyalty-tier
type: call
call: "loyalty.get-member-tier"
with:
reservation_id: "{{reservation_id}}"
- name: check-upgrade-availability
type: call
call: "opera.get-upgrade-options"
with:
property: "{{property_code}}"
reservation: "{{reservation_id}}"
min_tier: "{{check-loyalty-tier.tier}}"
- name: send-push-notification
type: call
call: "push-service.send-notification"
with:
reservation_id: "{{reservation_id}}"
title: "Complimentary Room Upgrade"
body: "You have been upgraded to {{check-upgrade-availability.upgrade_room_type}}. Enjoy your stay!"
consumes:
- type: http
namespace: loyalty
baseUri: "https://loyalty.hyatt.com/api/v2"
authentication:
type: bearer
token: "$secrets.loyalty_token"
resources:
- name: tiers
path: "/reservations/{{reservation_id}}/tier"
inputParameters:
- name: reservation_id
in: path
operations:
- name: get-member-tier
method: GET
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: upgrades
path: "/properties/{{property}}/reservations/{{reservation}}/upgrade-options"
inputParameters:
- name: property
in: path
- name: reservation
in: path
operations:
- name: get-upgrade-options
method: GET
- type: http
namespace: push-service
baseUri: "https://push.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.push_service_token"
resources:
- name: notifications
path: "/notifications"
operations:
- name: send-notification
method: POST
Recognizes guest special occasions by checking profile notes in Opera PMS, creating an amenity delivery in ALICE, and logging in the CRM for future stays.
naftiko: "0.5"
info:
label: "Guest Special Occasion Recognition Pipeline"
description: "Recognizes guest special occasions by checking profile notes in Opera PMS, creating an amenity delivery in ALICE, and logging in the CRM for future stays."
tags:
- guest-experience
- personalization
- oracle-cloud
- salesforce
capability:
exposes:
- type: mcp
namespace: special-occasions
port: 8080
tools:
- name: recognize-occasion
description: "Prepare special occasion recognition for a guest."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The reservation confirmation number."
- name: occasion_type
in: body
type: string
description: "Occasion type (birthday, anniversary, honeymoon)."
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: get-guest-profile
type: call
call: "opera.get-guest-profile"
with:
reservation: "{{reservation_id}}"
- name: create-amenity
type: call
call: "alice.create-request"
with:
property: "{{property_code}}"
type: "amenity_delivery"
room: "{{get-guest-profile.room_number}}"
description: "{{occasion_type}} recognition: {{get-guest-profile.guest_name}}. Preferred: {{get-guest-profile.preferences}}."
- name: log-in-crm
type: call
call: "salesforce.create-activity"
with:
contact_id: "{{get-guest-profile.crm_id}}"
subject: "{{occasion_type}} recognition at {{property_code}}"
description: "Amenity delivered: {{create-amenity.request_id}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: profiles
path: "/reservations/{{reservation}}/guest-profile"
inputParameters:
- name: reservation
in: path
operations:
- name: get-guest-profile
method: GET
- type: http
namespace: alice
baseUri: "https://api.aliceapp.com/v1"
authentication:
type: bearer
token: "$secrets.alice_token"
resources:
- name: requests
path: "/requests"
operations:
- name: create-request
method: POST
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: activities
path: "/sobjects/Task"
operations:
- name: create-activity
method: POST
Optimizes housekeeping room assignments by pulling departure/arrival data from Opera PMS, staff availability from Workday, and distributing assignments via ALICE.
naftiko: "0.5"
info:
label: "Housekeeping Room Assignment Optimizer"
description: "Optimizes housekeeping room assignments by pulling departure/arrival data from Opera PMS, staff availability from Workday, and distributing assignments via ALICE."
tags:
- housekeeping
- operations
- oracle-cloud
- workday
capability:
exposes:
- type: mcp
namespace: housekeeping-optimizer
port: 8080
tools:
- name: optimize-assignments
description: "Optimize housekeeping room assignments."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: date
in: body
type: string
description: "Date in YYYY-MM-DD."
steps:
- name: get-room-status
type: call
call: "opera.get-room-status"
with:
property: "{{property_code}}"
date: "{{date}}"
- name: get-staff-schedule
type: call
call: "workday.get-schedule"
with:
location: "property_{{property_code}}"
department: "housekeeping"
- name: distribute-assignments
type: call
call: "alice.create-bulk-tasks"
with:
property: "{{property_code}}"
rooms: "{{get-room-status.rooms_to_clean}}"
staff: "{{get-staff-schedule.available_staff}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: rooms
path: "/properties/{{property}}/room-status?date={{date}}"
inputParameters:
- name: property
in: path
- name: date
in: query
operations:
- name: get-room-status
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: schedules
path: "/schedules?location={{location}}&department={{department}}"
inputParameters:
- name: location
in: query
- name: department
in: query
operations:
- name: get-schedule
method: GET
- type: http
namespace: alice
baseUri: "https://api.aliceapp.com/v1"
authentication:
type: bearer
token: "$secrets.alice_token"
resources:
- name: tasks
path: "/tasks/bulk"
operations:
- name: create-bulk-tasks
method: POST
Queries Oracle Hospitality OPERA for the current housekeeping status of a room, returning clean/dirty/inspected status and assigned housekeeper.
naftiko: "0.5"
info:
label: "Housekeeping Room Status Lookup"
description: "Queries Oracle Hospitality OPERA for the current housekeeping status of a room, returning clean/dirty/inspected status and assigned housekeeper."
tags:
- property-management
- housekeeping
- oracle
capability:
exposes:
- type: mcp
namespace: housekeeping
port: 8080
tools:
- name: get-room-status
description: "Look up the housekeeping status of a hotel room by property code and room number."
inputParameters:
- name: property_code
in: body
type: string
description: "The Hyatt property code."
- name: room_number
in: body
type: string
description: "The room number."
call: "opera.get-room-status"
with:
property_code: "{{property_code}}"
room_number: "{{room_number}}"
outputParameters:
- name: hk_status
type: string
mapping: "$.roomStatus.housekeepingStatus"
- name: assigned_housekeeper
type: string
mapping: "$.roomStatus.assignedAttendant"
- name: last_cleaned
type: string
mapping: "$.roomStatus.lastCleanedDateTime"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: rooms
path: "/properties/{{property_code}}/rooms/{{room_number}}/status"
inputParameters:
- name: property_code
in: path
- name: room_number
in: path
operations:
- name: get-room-status
method: GET
When a sales-qualified lead is captured in HubSpot from a Hyatt meeting/events inquiry, creates a corresponding Salesforce opportunity and notifies the regional sales team.
naftiko: "0.5"
info:
label: "HubSpot Lead to Salesforce Opportunity Sync"
description: "When a sales-qualified lead is captured in HubSpot from a Hyatt meeting/events inquiry, creates a corresponding Salesforce opportunity and notifies the regional sales team."
tags:
- sales
- marketing
- hubspot
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lead-sync
port: 8080
tools:
- name: sync-lead-to-opportunity
description: "Convert a HubSpot lead into a Salesforce opportunity and notify sales."
inputParameters:
- name: hubspot_contact_id
in: body
type: string
description: "The HubSpot contact ID for the lead."
steps:
- name: get-lead
type: call
call: "hubspot.get-contact"
with:
contact_id: "{{hubspot_contact_id}}"
- name: create-opp
type: call
call: "salesforce.create-opportunity"
with:
name: "Meeting Inquiry: {{get-lead.company}} - {{get-lead.firstname}} {{get-lead.lastname}}"
amount: "{{get-lead.estimated_value}}"
stage: "Qualification"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "regional_sales"
text: "New opportunity from HubSpot: {{get-lead.company}} ({{get-lead.firstname}} {{get-lead.lastname}}). SF Opp: {{create-opp.id}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/crm/v3/objects/contacts/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls engagement metrics from Instagram's Graph API for Hyatt property accounts, returning follower count, recent post reach, and engagement rate.
naftiko: "0.5"
info:
label: "Instagram Social Engagement Reporter"
description: "Pulls engagement metrics from Instagram's Graph API for Hyatt property accounts, returning follower count, recent post reach, and engagement rate."
tags:
- marketing
- social-media
- instagram
capability:
exposes:
- type: mcp
namespace: social-engagement
port: 8080
tools:
- name: get-instagram-metrics
description: "Retrieve Instagram engagement metrics for a Hyatt property account."
inputParameters:
- name: instagram_account_id
in: body
type: string
description: "The Instagram business account ID."
call: "instagram.get-insights"
with:
account_id: "{{instagram_account_id}}"
outputParameters:
- name: followers
type: string
mapping: "$.followers_count"
- name: reach
type: string
mapping: "$.insights.reach"
- name: engagement_rate
type: string
mapping: "$.insights.engagement_rate"
consumes:
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v17.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: accounts
path: "/{{account_id}}"
inputParameters:
- name: account_id
in: path
- name: fields
in: query
value: "followers_count,media_count,insights"
operations:
- name: get-insights
method: GET
Provisions IT access for new property staff by creating Azure AD accounts, granting PMS access in Opera, and sending credentials via Microsoft Outlook.
naftiko: "0.5"
info:
label: "IT Access Provisioning for New Property Staff"
description: "Provisions IT access for new property staff by creating Azure AD accounts, granting PMS access in Opera, and sending credentials via Microsoft Outlook."
tags:
- it
- access-management
- azure-active-directory
- oracle-cloud
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: staff-provisioning
port: 8080
tools:
- name: provision-staff-access
description: "Provision IT system access for a new property staff member."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
- name: property_code
in: body
type: string
description: "The property code."
- name: role
in: body
type: string
description: "Job role."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-ad-account
type: call
call: "azure-ad.create-user"
with:
display_name: "{{get-employee.full_name}}"
mail: "{{get-employee.work_email}}"
groups: "Property_{{property_code}}_{{role}}"
- name: grant-pms-access
type: call
call: "opera.create-user"
with:
username: "{{get-employee.work_email}}"
property: "{{property_code}}"
role: "{{role}}"
- name: send-credentials
type: call
call: "outlook.send-email"
with:
to: "{{get-employee.work_email}}"
subject: "Your Hyatt IT Access Credentials"
body: "Welcome {{get-employee.first_name}}. Your AD account and Opera PMS access for {{property_code}} have been provisioned."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Retrieves the current sprint status and velocity for a technology team's Jira board.
naftiko: "0.5"
info:
label: "Jira Technology Project Status"
description: "Retrieves the current sprint status and velocity for a technology team's Jira board."
tags:
- engineering
- project
- jira
capability:
exposes:
- type: mcp
namespace: tech-projects
port: 8080
tools:
- name: get-project-status
description: "Get current sprint status for a technology project."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID."
call: "jira.get-active-sprint"
with:
board: "{{board_id}}"
outputParameters:
- name: sprint_name
type: string
mapping: "$.values[0].name"
- name: goal
type: string
mapping: "$.values[0].goal"
consumes:
- type: http
namespace: jira
baseUri: "https://hyatt.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board}}/sprint?state=active"
inputParameters:
- name: board
in: path
operations:
- name: get-active-sprint
method: GET
Creates a job posting on LinkedIn Jobs from Workday requisition data and notifies the recruiting team via Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Publisher"
description: "Creates a job posting on LinkedIn Jobs from Workday requisition data and notifies the recruiting team via Microsoft Teams."
tags:
- hr
- recruiting
- linkedin
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: job-posting
port: 8080
tools:
- name: publish-job-posting
description: "Publish a Workday requisition to LinkedIn Jobs and notify recruiters."
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: "linkedin.create-job"
with:
title: "{{get-requisition.job_title}}"
description: "{{get-requisition.job_description}}"
location: "{{get-requisition.location}}"
company_id: "hyatt"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "recruiting_ops"
text: "Job posted to LinkedIn: {{get-requisition.job_title}} in {{get-requisition.location}}. LinkedIn ID: {{post-job.job_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: "/recruiting/v1/jobRequisitions/{{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: jobs
path: "/simpleJobPostings"
operations:
- name: create-job
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a guest opts into World of Hyatt during booking, creates the loyalty account in Salesforce, sends a welcome email via Adobe Campaign, and updates the OPERA guest profile.
naftiko: "0.5"
info:
label: "Loyalty Member Enrollment Orchestrator"
description: "When a guest opts into World of Hyatt during booking, creates the loyalty account in Salesforce, sends a welcome email via Adobe Campaign, and updates the OPERA guest profile."
tags:
- loyalty
- hospitality
- salesforce
- adobe-campaign
- oracle
capability:
exposes:
- type: mcp
namespace: loyalty-enrollment
port: 8080
tools:
- name: enroll-loyalty-member
description: "Enroll a new guest in the World of Hyatt loyalty program."
inputParameters:
- name: guest_email
in: body
type: string
description: "Guest email address."
- name: first_name
in: body
type: string
description: "Guest first name."
- name: last_name
in: body
type: string
description: "Guest last name."
- name: reservation_id
in: body
type: string
description: "Associated OPERA reservation ID."
steps:
- name: create-loyalty-account
type: call
call: "salesforce.create-loyalty"
with:
email: "{{guest_email}}"
first_name: "{{first_name}}"
last_name: "{{last_name}}"
- name: send-welcome-email
type: call
call: "adobe-campaign.send-email"
with:
recipient_email: "{{guest_email}}"
template: "loyalty_welcome"
params: "{{first_name}},{{create-loyalty-account.member_id}}"
- name: update-opera-profile
type: call
call: "opera.update-guest"
with:
reservation_id: "{{reservation_id}}"
loyalty_member_id: "{{create-loyalty-account.member_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: loyalty
path: "/sobjects/Loyalty_Member__c"
operations:
- name: create-loyalty
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/hyatt/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: emails
path: "/email/send"
operations:
- name: send-email
method: POST
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: guests
path: "/reservations/{{reservation_id}}/guest"
inputParameters:
- name: reservation_id
in: path
operations:
- name: update-guest
method: PATCH
Retrieves a World of Hyatt member's loyalty points balance and tier status from Salesforce, returning current points, qualifying nights, and membership level.
naftiko: "0.5"
info:
label: "Loyalty Points Balance Lookup"
description: "Retrieves a World of Hyatt member's loyalty points balance and tier status from Salesforce, returning current points, qualifying nights, and membership level."
tags:
- loyalty
- hospitality
- salesforce
capability:
exposes:
- type: mcp
namespace: loyalty-points
port: 8080
tools:
- name: get-loyalty-balance
description: "Look up a World of Hyatt member's points balance and tier status by member ID."
inputParameters:
- name: member_id
in: body
type: string
description: "The World of Hyatt loyalty member ID."
call: "salesforce.get-loyalty-member"
with:
member_id: "{{member_id}}"
outputParameters:
- name: points_balance
type: string
mapping: "$.records[0].Points_Balance__c"
- name: tier_status
type: string
mapping: "$.records[0].Tier_Status__c"
- name: qualifying_nights
type: string
mapping: "$.records[0].Qualifying_Nights__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: loyalty-members
path: "/query"
inputParameters:
- name: q
in: query
value: "SELECT Points_Balance__c, Tier_Status__c, Qualifying_Nights__c FROM Loyalty_Member__c WHERE Member_ID__c = '{{member_id}}'"
operations:
- name: get-loyalty-member
method: GET
Processes loyalty tier upgrades by updating the member profile, syncing benefits to Opera PMS, and sending a congratulatory email via SendGrid.
naftiko: "0.5"
info:
label: "Loyalty Tier Upgrade Notification Pipeline"
description: "Processes loyalty tier upgrades by updating the member profile, syncing benefits to Opera PMS, and sending a congratulatory email via SendGrid."
tags:
- loyalty
- guest-experience
- oracle-cloud
- sendgrid
capability:
exposes:
- type: mcp
namespace: tier-upgrade
port: 8080
tools:
- name: process-tier-upgrade
description: "Process a World of Hyatt tier upgrade."
inputParameters:
- name: member_id
in: body
type: string
description: "The loyalty member ID."
- name: new_tier
in: body
type: string
description: "The new tier level."
steps:
- name: update-member
type: call
call: "loyalty.update-tier"
with:
member_id: "{{member_id}}"
tier: "{{new_tier}}"
- name: sync-benefits
type: call
call: "opera.update-guest-profile"
with:
member_id: "{{member_id}}"
tier: "{{new_tier}}"
benefits: "{{update-member.tier_benefits}}"
- name: send-congrats
type: call
call: "sendgrid.send-email"
with:
to: "{{update-member.email}}"
template_id: "tier_upgrade_congrats"
dynamic_data:
name: "{{update-member.first_name}}"
new_tier: "{{new_tier}}"
nights_earned: "{{update-member.qualifying_nights}}"
consumes:
- type: http
namespace: loyalty
baseUri: "https://loyalty.hyatt.com/api/v2"
authentication:
type: bearer
token: "$secrets.loyalty_token"
resources:
- name: members
path: "/members/{{member_id}}/tier"
inputParameters:
- name: member_id
in: path
operations:
- name: update-tier
method: PUT
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: profiles
path: "/guest-profiles/{{member_id}}"
inputParameters:
- name: member_id
in: path
operations:
- name: update-guest-profile
method: PATCH
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Reports on meeting space utilization by pulling bookings from Cvent, comparing against capacity from the catering system, and updating Snowflake analytics.
naftiko: "0.5"
info:
label: "Meeting Space Utilization Reporter"
description: "Reports on meeting space utilization by pulling bookings from Cvent, comparing against capacity from the catering system, and updating Snowflake analytics."
tags:
- events
- analytics
- cvent
- snowflake
capability:
exposes:
- type: mcp
namespace: meeting-utilization
port: 8080
tools:
- name: report-utilization
description: "Generate meeting space utilization report."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: month
in: body
type: string
description: "Month in YYYY-MM."
steps:
- name: get-bookings
type: call
call: "cvent.get-event-bookings"
with:
venue: "{{property_code}}"
month: "{{month}}"
- name: get-capacity
type: call
call: "catering.get-space-capacity"
with:
property: "{{property_code}}"
- name: update-analytics
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO meeting_space_utilization (property_code, month, bookings, capacity, utilization_pct) VALUES ('{{property_code}}', '{{month}}', {{get-bookings.total_events}}, {{get-capacity.total_capacity}}, {{get-bookings.total_events}} / {{get-capacity.total_capacity}} * 100)"
consumes:
- type: http
namespace: cvent
baseUri: "https://api.cvent.com/v1"
authentication:
type: bearer
token: "$secrets.cvent_token"
resources:
- name: events
path: "/venues/{{venue}}/events?month={{month}}"
inputParameters:
- name: venue
in: path
- name: month
in: query
operations:
- name: get-event-bookings
method: GET
- type: http
namespace: catering
baseUri: "https://catering.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.catering_token"
resources:
- name: spaces
path: "/properties/{{property}}/spaces"
inputParameters:
- name: property
in: path
operations:
- name: get-space-capacity
method: GET
- type: http
namespace: snowflake
baseUri: "https://hyatt.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Generates a property revenue report in Microsoft Excel via the Graph API, populating a template workbook with daily revenue data from OPERA.
naftiko: "0.5"
info:
label: "Microsoft Excel Revenue Report Generator"
description: "Generates a property revenue report in Microsoft Excel via the Graph API, populating a template workbook with daily revenue data from OPERA."
tags:
- revenue
- reporting
- microsoft-excel
- oracle
capability:
exposes:
- type: mcp
namespace: revenue-reporting
port: 8080
tools:
- name: generate-revenue-report
description: "Pull OPERA revenue data and populate an Excel report template."
inputParameters:
- name: property_code
in: body
type: string
description: "The Hyatt property code."
- name: month
in: body
type: string
description: "Report month in YYYY-MM format."
steps:
- name: get-revenue-data
type: call
call: "opera.get-monthly-revenue"
with:
property_code: "{{property_code}}"
month: "{{month}}"
- name: update-workbook
type: call
call: "excel.update-range"
with:
workbook_id: "revenue_template_{{property_code}}"
sheet_name: "MonthlyRevenue"
range: "A2:F32"
values: "{{get-revenue-data.daily_figures}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: revenue
path: "/properties/{{property_code}}/revenue"
inputParameters:
- name: property_code
in: path
- name: month
in: query
operations:
- name: get-monthly-revenue
method: GET
- type: http
namespace: excel
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/{{sheet_name}}/range(address='{{range}}')"
inputParameters:
- name: workbook_id
in: path
- name: sheet_name
in: path
- name: range
in: path
operations:
- name: update-range
method: PATCH
Schedules a meeting on a Hyatt employee's Outlook calendar via the Microsoft Graph API and returns the meeting link.
naftiko: "0.5"
info:
label: "Microsoft Outlook Meeting Scheduler"
description: "Schedules a meeting on a Hyatt employee's Outlook calendar via the Microsoft Graph API and returns the meeting link."
tags:
- communications
- scheduling
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: meeting-scheduler
port: 8080
tools:
- name: schedule-meeting
description: "Create a meeting on an employee's Outlook calendar."
inputParameters:
- name: organizer_upn
in: body
type: string
description: "Organizer's user principal name."
- name: subject
in: body
type: string
description: "Meeting subject."
- name: start_time
in: body
type: string
description: "Start time in ISO 8601 format."
- name: end_time
in: body
type: string
description: "End time in ISO 8601 format."
- name: attendees
in: body
type: string
description: "Comma-separated list of attendee email addresses."
call: "outlook.create-event"
with:
organizer_upn: "{{organizer_upn}}"
subject: "{{subject}}"
start_time: "{{start_time}}"
end_time: "{{end_time}}"
attendees: "{{attendees}}"
outputParameters:
- name: meeting_link
type: string
mapping: "$.onlineMeeting.joinUrl"
- name: event_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: events
path: "/users/{{organizer_upn}}/events"
inputParameters:
- name: organizer_upn
in: path
operations:
- name: create-event
method: POST
Sends an announcement message to a Hyatt property's Microsoft Teams channel for staff communications.
naftiko: "0.5"
info:
label: "Microsoft Teams Property Announcement Sender"
description: "Sends an announcement message to a Hyatt property's Microsoft Teams channel for staff communications."
tags:
- communications
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: staff-comms
port: 8080
tools:
- name: send-property-announcement
description: "Post an announcement to a property's Teams channel."
inputParameters:
- name: property_code
in: body
type: string
description: "The Hyatt property code."
- name: message
in: body
type: string
description: "The announcement message text."
call: "msteams.post-channel-message"
with:
channel_id: "announcements_{{property_code}}"
text: "{{message}}"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Automates minibar replenishment by checking consumption via the smart minibar system, creating a restock task in ALICE, and updating inventory in SAP.
naftiko: "0.5"
info:
label: "Minibar Replenishment Automation"
description: "Automates minibar replenishment by checking consumption via the smart minibar system, creating a restock task in ALICE, and updating inventory in SAP."
tags:
- food-and-beverage
- inventory
- sap
capability:
exposes:
- type: mcp
namespace: minibar
port: 8080
tools:
- name: replenish-minibar
description: "Automate minibar replenishment workflow."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: room_number
in: body
type: string
description: "The room number."
steps:
- name: check-consumption
type: call
call: "minibar-system.get-status"
with:
property: "{{property_code}}"
room: "{{room_number}}"
- name: create-restock-task
type: call
call: "alice.create-request"
with:
property: "{{property_code}}"
type: "minibar_restock"
room: "{{room_number}}"
description: "Items consumed: {{check-consumption.consumed_items}}"
- name: update-inventory
type: call
call: "sap.post-goods-issue"
with:
property: "{{property_code}}"
items: "{{check-consumption.consumed_items}}"
cost_center: "fb_minibar_{{property_code}}"
consumes:
- type: http
namespace: minibar-system
baseUri: "https://minibar.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.minibar_token"
resources:
- name: status
path: "/properties/{{property}}/rooms/{{room}}/status"
inputParameters:
- name: property
in: path
- name: room
in: path
operations:
- name: get-status
method: GET
- type: http
namespace: alice
baseUri: "https://api.aliceapp.com/v1"
authentication:
type: bearer
token: "$secrets.alice_token"
resources:
- name: requests
path: "/requests"
operations:
- name: create-request
method: POST
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/ZMM_GI_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: goods-issues
path: "/GoodsIssueSet"
operations:
- name: post-goods-issue
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for training materials, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Employee Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for training materials, and sends a Microsoft Teams welcome message."
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 property assignment, orchestrate the full onboarding sequence."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "Employee start date in YYYY-MM-DD format."
- name: property_code
in: body
type: string
description: "Assigned Hyatt property code."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Onboarding: {{get-employee.full_name}} at {{property_code}}"
category: "hr_onboarding"
assigned_group: "HR_Onboarding_{{property_code}}"
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr_onboarding"
folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Hyatt, {{get-employee.first_name}}! Your onboarding ticket is {{open-ticket.number}}. Training docs: {{provision-folder.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: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyatt.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/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
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: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves application performance metrics from New Relic for Hyatt's booking platform, returning response time, error rate, and throughput.
naftiko: "0.5"
info:
label: "New Relic Application Performance Lookup"
description: "Retrieves application performance metrics from New Relic for Hyatt's booking platform, returning response time, error rate, and throughput."
tags:
- it-operations
- monitoring
- new-relic
capability:
exposes:
- type: mcp
namespace: app-performance
port: 8080
tools:
- name: get-app-performance
description: "Get performance metrics from New Relic for a Hyatt application."
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: response_time
type: string
mapping: "$.application.application_summary.response_time"
- name: error_rate
type: string
mapping: "$.application.application_summary.error_rate"
- name: throughput
type: string
mapping: "$.application.application_summary.throughput"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
name: "Api-Key"
in: header
value: "$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
Checks rate parity across OTAs by comparing Opera PMS rates with Booking.com and Expedia, alerting revenue management via Slack on disparities.
naftiko: "0.5"
info:
label: "Online Booking Channel Rate Parity Checker"
description: "Checks rate parity across OTAs by comparing Opera PMS rates with Booking.com and Expedia, alerting revenue management via Slack on disparities."
tags:
- revenue
- distribution
- oracle-cloud
- slack
capability:
exposes:
- type: mcp
namespace: rate-parity
port: 8080
tools:
- name: check-rate-parity
description: "Check rate parity across booking channels."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: room_type
in: body
type: string
description: "Room type to check."
- name: check_date
in: body
type: string
description: "Date to check."
steps:
- name: get-opera-rate
type: call
call: "opera.get-rate"
with:
property: "{{property_code}}"
room_type: "{{room_type}}"
date: "{{check_date}}"
- name: get-ota-rates
type: call
call: "rate-shopper.get-rates"
with:
property: "{{property_code}}"
room_type: "{{room_type}}"
date: "{{check_date}}"
- name: alert-revenue-mgmt
type: call
call: "slack.post-message"
with:
channel: "revenue-management"
text: "Rate parity alert for {{property_code}} on {{check_date}}: Our rate ${{get-opera-rate.rate}}. Booking.com: ${{get-ota-rates.booking_com}}. Expedia: ${{get-ota-rates.expedia}}."
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: rates
path: "/properties/{{property}}/rates?roomType={{room_type}}&date={{date}}"
inputParameters:
- name: property
in: path
- name: room_type
in: query
- name: date
in: query
operations:
- name: get-rate
method: GET
- type: http
namespace: rate-shopper
baseUri: "https://rateshopper.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.rate_shopper_token"
resources:
- name: rates
path: "/properties/{{property}}/channel-rates"
inputParameters:
- name: property
in: path
operations:
- name: get-rates
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the current room rate and availability for a room type at a property from Oracle Opera PMS.
naftiko: "0.5"
info:
label: "Opera PMS Room Rate Lookup"
description: "Retrieves the current room rate and availability for a room type at a property from Oracle Opera PMS."
tags:
- revenue
- rooms
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: room-rates
port: 8080
tools:
- name: get-room-rate
description: "Look up room rate and availability by property and room type."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: room_type
in: body
type: string
description: "The room type code."
- name: check_in_date
in: body
type: string
description: "Check-in date in YYYY-MM-DD."
call: "opera.get-rate"
with:
property: "{{property_code}}"
room_type: "{{room_type}}"
date: "{{check_in_date}}"
outputParameters:
- name: rate
type: number
mapping: "$.rateAmount"
- name: available_rooms
type: integer
mapping: "$.availability"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: rates
path: "/properties/{{property}}/rates?roomType={{room_type}}&date={{date}}"
inputParameters:
- name: property
in: path
- name: room_type
in: query
- name: date
in: query
operations:
- name: get-rate
method: GET
Creates a journal entry in Oracle Cloud Financials for property-level accounting, including revenue recognition and cost allocation.
naftiko: "0.5"
info:
label: "Oracle Cloud Finance Journal Entry Creator"
description: "Creates a journal entry in Oracle Cloud Financials for property-level accounting, including revenue recognition and cost allocation."
tags:
- finance
- accounting
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: finance-journals
port: 8080
tools:
- name: create-journal-entry
description: "Create a journal entry in Oracle Cloud Financials."
inputParameters:
- name: ledger_name
in: body
type: string
description: "The ledger name."
- name: journal_lines
in: body
type: string
description: "JSON array of journal line items with account, debit, credit."
- name: description
in: body
type: string
description: "Journal entry description."
call: "oracle-cloud.create-journal"
with:
ledger_name: "{{ledger_name}}"
journal_lines: "{{journal_lines}}"
description: "{{description}}"
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://hyatt.oraclecloud.com/fscmRestApi/resources/v2"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: journals
path: "/generalAccountingJournals"
operations:
- name: create-journal
method: POST
Retrieves the status and responder for a PagerDuty incident affecting hotel technology systems.
naftiko: "0.5"
info:
label: "PagerDuty Hotel Systems Incident Lookup"
description: "Retrieves the status and responder for a PagerDuty incident affecting hotel technology systems."
tags:
- it
- incident-management
- pagerduty
capability:
exposes:
- type: mcp
namespace: hotel-incidents
port: 8080
tools:
- name: get-incident
description: "Look up a hotel systems PagerDuty incident."
inputParameters:
- name: incident_id
in: body
type: string
description: "The PagerDuty incident ID."
call: "pagerduty.get-incident"
with:
id: "{{incident_id}}"
outputParameters:
- name: status
type: string
mapping: "$.incident.status"
- name: service
type: string
mapping: "$.incident.service.summary"
- name: responder
type: string
mapping: "$.incident.assignments[0].assignee.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-incident
method: GET
Assigns a Pluralsight learning path to a hotel employee based on their role and notifies them via Microsoft Teams.
naftiko: "0.5"
info:
label: "Pluralsight Training Assignment Creator"
description: "Assigns a Pluralsight learning path to a hotel employee based on their role and notifies them via Microsoft Teams."
tags:
- hr
- training
- pluralsight
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: training
port: 8080
tools:
- name: assign-training
description: "Assign a Pluralsight learning path and notify the employee."
inputParameters:
- name: employee_email
in: body
type: string
description: "Employee email address."
- name: channel_id
in: body
type: string
description: "The Pluralsight channel ID for the learning path."
steps:
- name: assign-channel
type: call
call: "pluralsight.assign-channel"
with:
email: "{{employee_email}}"
channel_id: "{{channel_id}}"
- name: notify-employee
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{employee_email}}"
text: "You've been assigned a new training path on Pluralsight. Start learning: {{assign-channel.channel_url}}"
consumes:
- type: http
namespace: pluralsight
baseUri: "https://api.pluralsight.com/api/v1"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: channels
path: "/channels/{{channel_id}}/assignments"
inputParameters:
- name: channel_id
in: path
operations:
- name: assign-channel
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Schedules pool and spa maintenance by checking water quality sensor data from the BMS, creating work orders in ServiceNow, and notifying the facilities team via Slack.
naftiko: "0.5"
info:
label: "Pool and Spa Maintenance Scheduler"
description: "Schedules pool and spa maintenance by checking water quality sensor data from the BMS, creating work orders in ServiceNow, and notifying the facilities team via Slack."
tags:
- facilities
- maintenance
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: pool-maintenance
port: 8080
tools:
- name: schedule-pool-maintenance
description: "Schedule pool and spa maintenance."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: get-water-quality
type: call
call: "bms.get-pool-sensors"
with:
property: "{{property_code}}"
- name: create-work-order
type: call
call: "servicenow.create-task"
with:
short_description: "Pool maintenance: {{property_code}}"
category: "facilities"
description: "pH: {{get-water-quality.ph}}, Chlorine: {{get-water-quality.chlorine_ppm}}, Temp: {{get-water-quality.temperature}}F"
- name: notify-facilities
type: call
call: "slack.post-message"
with:
channel: "property-{{property_code}}-facilities"
text: "Pool maintenance scheduled. pH: {{get-water-quality.ph}}, Chlorine: {{get-water-quality.chlorine_ppm}}ppm. WO: {{create-work-order.number}}."
consumes:
- type: http
namespace: bms
baseUri: "https://bms.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.bms_token"
resources:
- name: pool
path: "/properties/{{property}}/pool/sensors"
inputParameters:
- name: property
in: path
operations:
- name: get-pool-sensors
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyatt.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/task"
operations:
- name: create-task
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Triggers a refresh of the Hyatt portfolio performance Power BI dataset to update RevPAR, occupancy, and ADR dashboards.
naftiko: "0.5"
info:
label: "Power BI Portfolio Performance Refresh"
description: "Triggers a refresh of the Hyatt portfolio performance Power BI dataset to update RevPAR, occupancy, and ADR dashboards."
tags:
- analytics
- revenue
- power-bi
capability:
exposes:
- type: mcp
namespace: portfolio-dashboard
port: 8080
tools:
- name: refresh-portfolio-dashboard
description: "Trigger portfolio performance dashboard refresh."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
call: "powerbi.refresh-dataset"
with:
id: "{{dataset_id}}"
outputParameters:
- name: refresh_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{id}}/refreshes"
inputParameters:
- name: id
in: path
operations:
- name: refresh-dataset
method: POST
When a vendor invoice arrives in SAP, validates it against the PO in Oracle Cloud, routes for approval in Microsoft Power Automate, and notifies the finance team via Teams.
naftiko: "0.5"
info:
label: "Procurement Invoice Approval Pipeline"
description: "When a vendor invoice arrives in SAP, validates it against the PO in Oracle Cloud, routes for approval in Microsoft Power Automate, and notifies the finance team via Teams."
tags:
- procurement
- finance
- sap
- oracle-cloud
- microsoft-power-automate
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: invoice-approval
port: 8080
tools:
- name: process-invoice
description: "Validate and route a vendor invoice for approval."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The SAP invoice document number."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice_id: "{{invoice_id}}"
- name: validate-po
type: call
call: "oracle-cloud.get-po"
with:
po_number: "{{get-invoice.po_reference}}"
- name: trigger-approval
type: call
call: "power-automate.trigger-flow"
with:
flow_id: "invoice_approval"
invoice_amount: "{{get-invoice.total_amount}}"
vendor: "{{get-invoice.vendor_name}}"
po_match: "{{validate-po.status}}"
- name: notify-finance
type: call
call: "msteams.send-message"
with:
channel_id: "finance_ap"
text: "Invoice {{invoice_id}} from {{get-invoice.vendor_name}} (${{get-invoice.total_amount}}) routed for approval. PO match: {{validate-po.status}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_id}}')"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: oracle-cloud
baseUri: "https://hyatt.oraclecloud.com/fscmRestApi/resources/v2"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: purchase-orders
path: "/purchaseOrders"
inputParameters:
- name: q
in: query
value: "OrderNumber={{po_number}}"
operations:
- name: get-po
method: GET
- type: http
namespace: power-automate
baseUri: "https://prod-00.westus.logic.azure.com/workflows"
authentication:
type: bearer
token: "$secrets.power_automate_token"
resources:
- name: flows
path: "/{{flow_id}}/triggers/manual/paths/invoke"
inputParameters:
- name: flow_id
in: path
operations:
- name: trigger-flow
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Orchestrates property brand standard audits by pulling the checklist from ServiceNow, documenting findings in SharePoint, and creating corrective action items in Jira.
naftiko: "0.5"
info:
label: "Property Brand Audit Orchestrator"
description: "Orchestrates property brand standard audits by pulling the checklist from ServiceNow, documenting findings in SharePoint, and creating corrective action items in Jira."
tags:
- brand-standards
- compliance
- servicenow
- sharepoint
- jira
capability:
exposes:
- type: mcp
namespace: brand-audit
port: 8080
tools:
- name: conduct-brand-audit
description: "Conduct a property brand standard audit."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: audit_date
in: body
type: string
description: "Audit date in YYYY-MM-DD."
steps:
- name: get-audit-checklist
type: call
call: "servicenow.get-template"
with:
template: "brand_standard_audit"
- name: archive-findings
type: call
call: "sharepoint.upload-document"
with:
site_id: "brand_standards"
folder_path: "Audits/{{property_code}}/{{audit_date}}"
file_name: "brand_audit_results.json"
- name: create-corrective-actions
type: call
call: "jira.create-issue"
with:
project: "BRAND"
issue_type: "Task"
summary: "Brand audit corrective actions: {{property_code}} - {{audit_date}}"
labels: "brand-audit,{{property_code}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyatt.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: templates
path: "/table/checklist_template?sysparm_query=name={{template}}"
inputParameters:
- name: template
in: query
operations:
- name: get-template
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: uploads
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-document
method: PUT
- type: http
namespace: jira
baseUri: "https://hyatt.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Pulls energy usage data from the building management system API and logs it to a Google Sheet for sustainability tracking.
naftiko: "0.5"
info:
label: "Property Energy Consumption Reporter"
description: "Pulls energy usage data from the building management system API and logs it to a Google Sheet for sustainability tracking."
tags:
- sustainability
- property-management
- google-sheets
capability:
exposes:
- type: mcp
namespace: energy-tracking
port: 8080
tools:
- name: report-energy-usage
description: "Retrieve energy data and log to Google Sheets for sustainability tracking."
inputParameters:
- name: property_code
in: body
type: string
description: "The Hyatt property code."
- name: month
in: body
type: string
description: "Reporting month in YYYY-MM format."
steps:
- name: get-energy-data
type: call
call: "bms.get-consumption"
with:
property_code: "{{property_code}}"
month: "{{month}}"
- name: log-to-sheet
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "energy_tracking"
range: "Monthly!A:E"
values: "{{property_code}},{{month}},{{get-energy-data.electricity_kwh}},{{get-energy-data.gas_therms}},{{get-energy-data.water_gallons}}"
consumes:
- type: http
namespace: bms
baseUri: "https://bms-api.hyatt.com/v1"
authentication:
type: bearer
token: "$secrets.bms_token"
resources:
- name: consumption
path: "/properties/{{property_code}}/consumption"
inputParameters:
- name: property_code
in: path
- name: month
in: query
operations:
- name: get-consumption
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
Optimizes property energy usage by pulling BMS data, comparing against occupancy from Opera PMS, and adjusting HVAC setpoints based on occupancy patterns.
naftiko: "0.5"
info:
label: "Property Energy Optimization Pipeline"
description: "Optimizes property energy usage by pulling BMS data, comparing against occupancy from Opera PMS, and adjusting HVAC setpoints based on occupancy patterns."
tags:
- sustainability
- energy
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: energy-optimization
port: 8080
tools:
- name: optimize-energy
description: "Optimize property energy based on occupancy."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: get-energy-data
type: call
call: "bms.get-energy-consumption"
with:
property: "{{property_code}}"
- name: get-occupancy
type: call
call: "opera.get-occupancy"
with:
property: "{{property_code}}"
- name: adjust-setpoints
type: call
call: "bms.update-hvac-schedule"
with:
property: "{{property_code}}"
occupancy_rate: "{{get-occupancy.rate}}"
current_consumption: "{{get-energy-data.kwh}}"
consumes:
- type: http
namespace: bms
baseUri: "https://bms.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.bms_token"
resources:
- name: energy
path: "/properties/{{property}}/energy"
inputParameters:
- name: property
in: path
operations:
- name: get-energy-consumption
method: GET
- name: hvac
path: "/properties/{{property}}/hvac/schedule"
inputParameters:
- name: property
in: path
operations:
- name: update-hvac-schedule
method: PUT
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: occupancy
path: "/properties/{{property}}/occupancy"
inputParameters:
- name: property
in: path
operations:
- name: get-occupancy
method: GET
Tracks food and beverage waste by pulling waste logs from the kitchen management system, recording metrics in Snowflake, and sending weekly reports via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Property F&B Waste Reduction Tracker"
description: "Tracks food and beverage waste by pulling waste logs from the kitchen management system, recording metrics in Snowflake, and sending weekly reports via Microsoft Outlook."
tags:
- sustainability
- food-and-beverage
- snowflake
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: fb-waste
port: 8080
tools:
- name: track-fb-waste
description: "Track and report F&B waste for a property."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: week_ending
in: body
type: string
description: "Week ending date in YYYY-MM-DD."
steps:
- name: get-waste-logs
type: call
call: "kitchen-mgmt.get-waste-report"
with:
property: "{{property_code}}"
week: "{{week_ending}}"
- name: record-metrics
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO fb_waste_metrics (property_code, week_ending, total_waste_kg, waste_cost, diversion_rate) VALUES ('{{property_code}}', '{{week_ending}}', {{get-waste-logs.total_kg}}, {{get-waste-logs.total_cost}}, {{get-waste-logs.diversion_rate}})"
- name: send-report
type: call
call: "outlook.send-email"
with:
to: "fb_director_{{property_code}}@hyatt.com"
subject: "F&B Waste Report: {{property_code}} - Week {{week_ending}}"
body: "Total waste: {{get-waste-logs.total_kg}}kg (${{get-waste-logs.total_cost}}). Diversion rate: {{get-waste-logs.diversion_rate}}%. Top waste category: {{get-waste-logs.top_category}}."
consumes:
- type: http
namespace: kitchen-mgmt
baseUri: "https://kitchen.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.kitchen_mgmt_token"
resources:
- name: waste
path: "/properties/{{property}}/waste?week={{week}}"
inputParameters:
- name: property
in: path
- name: week
in: query
operations:
- name: get-waste-report
method: GET
- type: http
namespace: snowflake
baseUri: "https://hyatt.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Orchestrates fire safety system checks by pulling sensor data from BMS, logging inspection results in ServiceNow, and notifying the safety officer via Microsoft Teams.
naftiko: "0.5"
info:
label: "Property Fire Safety System Check Orchestrator"
description: "Orchestrates fire safety system checks by pulling sensor data from BMS, logging inspection results in ServiceNow, and notifying the safety officer via Microsoft Teams."
tags:
- safety
- compliance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fire-safety
port: 8080
tools:
- name: check-fire-safety
description: "Check fire safety systems at a property."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: get-sensor-status
type: call
call: "bms.get-fire-systems"
with:
property: "{{property_code}}"
- name: log-inspection
type: call
call: "servicenow.create-task"
with:
short_description: "Fire safety inspection: {{property_code}}"
category: "fire_safety"
description: "Smoke detectors: {{get-sensor-status.smoke_ok}}. Sprinklers: {{get-sensor-status.sprinkler_ok}}. Alarms: {{get-sensor-status.alarm_ok}}."
- name: notify-safety-officer
type: call
call: "msteams.send-message"
with:
channel_id: "property-{{property_code}}-safety"
text: "Fire safety check complete. Smoke: {{get-sensor-status.smoke_ok}}, Sprinkler: {{get-sensor-status.sprinkler_ok}}, Alarm: {{get-sensor-status.alarm_ok}}. Task: {{log-inspection.number}}."
consumes:
- type: http
namespace: bms
baseUri: "https://bms.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.bms_token"
resources:
- name: fire
path: "/properties/{{property}}/fire-systems"
inputParameters:
- name: property
in: path
operations:
- name: get-fire-systems
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyatt.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/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: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Coordinates food safety audits by pulling inspection checklists from ServiceNow, checking staff certifications in Workday, and archiving results in SharePoint.
naftiko: "0.5"
info:
label: "Property Food Safety Audit Coordinator"
description: "Coordinates food safety audits by pulling inspection checklists from ServiceNow, checking staff certifications in Workday, and archiving results in SharePoint."
tags:
- food-safety
- compliance
- servicenow
- workday
- sharepoint
capability:
exposes:
- type: mcp
namespace: food-safety-audit
port: 8080
tools:
- name: coordinate-food-audit
description: "Coordinate a property food safety audit."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: audit_date
in: body
type: string
description: "Audit date in YYYY-MM-DD."
steps:
- name: get-checklist
type: call
call: "servicenow.get-template"
with:
template: "food_safety_audit"
- name: verify-certifications
type: call
call: "workday.get-certifications"
with:
location: "property_{{property_code}}"
cert_type: "food_handler"
- name: archive-results
type: call
call: "sharepoint.upload-document"
with:
site_id: "food_safety"
folder_path: "Audits/{{property_code}}/{{audit_date}}"
file_name: "food_safety_audit_{{property_code}}.json"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyatt.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: templates
path: "/table/checklist_template?sysparm_query=name={{template}}"
inputParameters:
- name: template
in: query
operations:
- name: get-template
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: certifications
path: "/certifications?location={{location}}&type={{cert_type}}"
inputParameters:
- name: location
in: query
- name: cert_type
in: query
operations:
- name: get-certifications
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: uploads
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-document
method: PUT
Generates the GM daily briefing by pulling occupancy from Opera PMS, guest satisfaction from Revinate, open issues from ServiceNow, and emailing via Outlook.
naftiko: "0.5"
info:
label: "Property GM Daily Briefing Generator"
description: "Generates the GM daily briefing by pulling occupancy from Opera PMS, guest satisfaction from Revinate, open issues from ServiceNow, and emailing via Outlook."
tags:
- operations
- reporting
- oracle-cloud
- revinate
- servicenow
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: gm-briefing
port: 8080
tools:
- name: generate-gm-briefing
description: "Generate the daily GM briefing for a property."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: get-occupancy
type: call
call: "opera.get-daily-stats"
with:
property: "{{property_code}}"
- name: get-satisfaction
type: call
call: "revinate.get-daily-score"
with:
property: "{{property_code}}"
- name: get-open-issues
type: call
call: "servicenow.get-incidents"
with:
query: "assignment_group.name=Property_{{property_code}}^state!=6"
- name: send-briefing
type: call
call: "outlook.send-email"
with:
to: "gm_{{property_code}}@hyatt.com"
subject: "Daily Briefing: {{property_code}}"
body: "Occupancy: {{get-occupancy.occupancy_rate}}%. ADR: ${{get-occupancy.adr}}. RevPAR: ${{get-occupancy.revpar}}. Guest satisfaction: {{get-satisfaction.score}}/5. Open issues: {{get-open-issues.count}}."
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: stats
path: "/properties/{{property}}/daily-stats"
inputParameters:
- name: property
in: path
operations:
- name: get-daily-stats
method: GET
- type: http
namespace: revinate
baseUri: "https://api.revinate.com/v2"
authentication:
type: bearer
token: "$secrets.revinate_token"
resources:
- name: daily
path: "/properties/{{property}}/daily-score"
inputParameters:
- name: property
in: path
operations:
- name: get-daily-score
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyatt.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query={{query}}"
inputParameters:
- name: query
in: query
operations:
- name: get-incidents
method: GET
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Handles property maintenance emergencies by creating a ServiceNow urgent ticket, dispatching a technician via ALICE, and notifying engineering leadership via Microsoft Teams.
naftiko: "0.5"
info:
label: "Property Maintenance Emergency Handler"
description: "Handles property maintenance emergencies by creating a ServiceNow urgent ticket, dispatching a technician via ALICE, and notifying engineering leadership via Microsoft Teams."
tags:
- maintenance
- emergency
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: maintenance-emergency
port: 8080
tools:
- name: handle-emergency
description: "Handle a property maintenance emergency."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: issue_type
in: body
type: string
description: "Issue type (plumbing, electrical, hvac, fire)."
- name: location
in: body
type: string
description: "Location within property (room number or area)."
steps:
- name: create-urgent-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "EMERGENCY: {{issue_type}} at {{property_code}} - {{location}}"
urgency: "1"
category: "facilities"
- name: dispatch-engineer
type: call
call: "alice.create-request"
with:
property: "{{property_code}}"
type: "engineering_emergency"
location: "{{location}}"
description: "{{issue_type}} emergency"
- name: notify-leadership
type: call
call: "msteams.send-message"
with:
channel_id: "property-{{property_code}}-engineering"
text: "EMERGENCY: {{issue_type}} at {{location}}. ServiceNow: {{create-urgent-ticket.number}}. ALICE dispatch: {{dispatch-engineer.request_id}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyatt.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: alice
baseUri: "https://api.aliceapp.com/v1"
authentication:
type: bearer
token: "$secrets.alice_token"
resources:
- name: requests
path: "/requests"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates a ServiceNow maintenance ticket for a Hyatt property issue, assigns it to the local engineering team, and notifies the property manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Property Maintenance Ticket Creator"
description: "Creates a ServiceNow maintenance ticket for a Hyatt property issue, assigns it to the local engineering team, and notifies the property manager via Microsoft Teams."
tags:
- property-management
- maintenance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: property-maintenance
port: 8080
tools:
- name: create-maintenance-ticket
description: "Create a maintenance work order for a property issue and notify the property manager."
inputParameters:
- name: property_code
in: body
type: string
description: "The Hyatt property code (e.g., CHIRC for Chicago Regency)."
- name: issue_description
in: body
type: string
description: "Description of the maintenance issue."
- name: priority
in: body
type: string
description: "Priority level: critical, high, medium, low."
steps:
- name: create-ticket
type: call
call: "servicenow.create-work-order"
with:
short_description: "Maintenance: {{property_code}} - {{issue_description}}"
priority: "{{priority}}"
assignment_group: "Property_Engineering_{{property_code}}"
category: "facilities_maintenance"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
channel_id: "property_ops_{{property_code}}"
text: "New maintenance ticket {{create-ticket.number}}: {{issue_description}} (Priority: {{priority}})"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyatt.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Coordinates new property pre-launch activities by creating a project in Jira, provisioning Opera PMS profiles, and notifying corporate teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Property Opening Pre-Launch Coordinator"
description: "Coordinates new property pre-launch activities by creating a project in Jira, provisioning Opera PMS profiles, and notifying corporate teams via Microsoft Teams."
tags:
- property-development
- launch
- jira
- oracle-cloud
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: property-launch
port: 8080
tools:
- name: coordinate-pre-launch
description: "Coordinate pre-launch activities for a new property."
inputParameters:
- name: property_code
in: body
type: string
description: "The new property code."
- name: property_name
in: body
type: string
description: "Property name."
- name: opening_date
in: body
type: string
description: "Opening date in YYYY-MM-DD."
steps:
- name: create-project
type: call
call: "jira.create-project"
with:
name: "Pre-Launch: {{property_name}} ({{property_code}})"
key: "PL{{property_code}}"
template: "property_opening"
- name: provision-pms
type: call
call: "opera.create-property"
with:
code: "{{property_code}}"
name: "{{property_name}}"
opening_date: "{{opening_date}}"
- name: notify-corporate
type: call
call: "msteams.send-message"
with:
channel_id: "property-development"
text: "Pre-launch initiated for {{property_name}} ({{property_code}}). Opening: {{opening_date}}. Jira: {{create-project.key}}. PMS provisioned."
consumes:
- type: http
namespace: jira
baseUri: "https://hyatt.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: projects
path: "/project"
operations:
- name: create-project
method: POST
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: properties
path: "/properties"
operations:
- name: create-property
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Tracks property renovation progress by pulling milestones from Jira, comparing budget spend in SAP, and reporting to stakeholders via a Power BI dashboard refresh.
naftiko: "0.5"
info:
label: "Property Renovation Progress Tracker"
description: "Tracks property renovation progress by pulling milestones from Jira, comparing budget spend in SAP, and reporting to stakeholders via a Power BI dashboard refresh."
tags:
- property-development
- renovation
- jira
- sap
- power-bi
capability:
exposes:
- type: mcp
namespace: renovation-tracker
port: 8080
tools:
- name: track-renovation
description: "Track property renovation progress."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira renovation project key."
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: get-milestones
type: call
call: "jira.get-issues"
with:
jql: "project = '{{project_key}}' AND type = Milestone ORDER BY dueDate"
- name: get-budget-spend
type: call
call: "sap.get-project-actuals"
with:
project_code: "REN_{{property_code}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "renovation-progress"
consumes:
- type: http
namespace: jira
baseUri: "https://hyatt.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search?jql={{jql}}"
inputParameters:
- name: jql
in: query
operations:
- name: get-issues
method: GET
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/ZPS_PROJECT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: actuals
path: "/ProjectActualsSet('{{project_code}}')"
inputParameters:
- name: project_code
in: path
operations:
- name: get-project-actuals
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
Generates property revenue forecasts by pulling booking pace from Opera PMS, historical data from Snowflake, and publishing the forecast to Power BI.
naftiko: "0.5"
info:
label: "Property Revenue Forecast Pipeline"
description: "Generates property revenue forecasts by pulling booking pace from Opera PMS, historical data from Snowflake, and publishing the forecast to Power BI."
tags:
- revenue
- forecasting
- oracle-cloud
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: revenue-forecast
port: 8080
tools:
- name: generate-revenue-forecast
description: "Generate property revenue forecast."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: forecast_month
in: body
type: string
description: "Forecast month in YYYY-MM."
steps:
- name: get-booking-pace
type: call
call: "opera.get-booking-pace"
with:
property: "{{property_code}}"
month: "{{forecast_month}}"
- name: get-historical
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT avg_revpar, avg_occupancy, avg_adr FROM property_history WHERE property_code = '{{property_code}}' AND month_name = '{{forecast_month}}'"
- name: refresh-forecast-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "property-revenue-forecast"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: pace
path: "/properties/{{property}}/booking-pace?month={{month}}"
inputParameters:
- name: property
in: path
- name: month
in: query
operations:
- name: get-booking-pace
method: GET
- type: http
namespace: snowflake
baseUri: "https://hyatt.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: 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
Handles property security incidents by creating a case in ServiceNow, alerting security leadership via Microsoft Teams, and logging evidence in SharePoint.
naftiko: "0.5"
info:
label: "Property Security Incident Handler"
description: "Handles property security incidents by creating a case in ServiceNow, alerting security leadership via Microsoft Teams, and logging evidence in SharePoint."
tags:
- security
- operations
- servicenow
- microsoft-teams
- sharepoint
capability:
exposes:
- type: mcp
namespace: security-incidents
port: 8080
tools:
- name: handle-security-incident
description: "Handle a property security incident."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: incident_type
in: body
type: string
description: "Incident type."
- name: location
in: body
type: string
description: "Location within property."
steps:
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Security incident: {{property_code}} - {{incident_type}}"
urgency: "1"
category: "security"
location: "{{location}}"
- name: alert-security
type: call
call: "msteams.send-message"
with:
channel_id: "security-operations"
text: "SECURITY ALERT: {{incident_type}} at {{property_code}} ({{location}}). Case: {{create-case.number}}."
- name: create-evidence-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "security_operations"
folder_path: "Incidents/{{property_code}}/{{create-case.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyatt.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: messages
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/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: folders
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
Responds to social media crises by monitoring mentions via Twitter API, creating a ServiceNow incident, and escalating to the communications team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Property Social Media Crisis Handler"
description: "Responds to social media crises by monitoring mentions via Twitter API, creating a ServiceNow incident, and escalating to the communications team via Microsoft Teams."
tags:
- communications
- social-media
- twitter
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: social-crisis
port: 8080
tools:
- name: handle-social-crisis
description: "Handle a social media crisis for a property."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: post_url
in: body
type: string
description: "URL of the problematic social post."
- name: severity
in: body
type: string
description: "Severity (low, medium, high, critical)."
steps:
- name: get-post-details
type: call
call: "twitter.get-tweet"
with:
url: "{{post_url}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Social media crisis: {{property_code}} - {{severity}}"
description: "Post: {{post_url}}. Content: {{get-post-details.text}}. Engagement: {{get-post-details.retweet_count}} retweets."
category: "communications"
- name: escalate-comms
type: call
call: "msteams.send-message"
with:
channel_id: "corporate-communications"
text: "SOCIAL MEDIA ALERT ({{severity}}): {{property_code}}. Post: {{post_url}}. Retweets: {{get-post-details.retweet_count}}. Case: {{create-incident.number}}."
consumes:
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: get-tweet
method: GET
- type: http
namespace: servicenow
baseUri: "https://hyatt.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: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Coordinates Wi-Fi infrastructure upgrades by creating a project in Jira, scheduling downtime in ServiceNow, and notifying affected properties via Microsoft Teams.
naftiko: "0.5"
info:
label: "Property Wi-Fi Infrastructure Upgrade Coordinator"
description: "Coordinates Wi-Fi infrastructure upgrades by creating a project in Jira, scheduling downtime in ServiceNow, and notifying affected properties via Microsoft Teams."
tags:
- it
- network
- jira
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: wifi-upgrade
port: 8080
tools:
- name: coordinate-wifi-upgrade
description: "Coordinate a property Wi-Fi infrastructure upgrade."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: upgrade_date
in: body
type: string
description: "Upgrade date."
steps:
- name: create-project
type: call
call: "jira.create-issue"
with:
project: "INFRA"
issue_type: "Task"
summary: "Wi-Fi upgrade: {{property_code}} - {{upgrade_date}}"
- name: schedule-maintenance-window
type: call
call: "servicenow.create-change"
with:
short_description: "Wi-Fi upgrade: {{property_code}}"
scheduled_date: "{{upgrade_date}}"
category: "network"
- name: notify-property
type: call
call: "msteams.send-message"
with:
channel_id: "property-{{property_code}}-it"
text: "Wi-Fi infrastructure upgrade scheduled for {{upgrade_date}}. Change request: {{schedule-maintenance-window.number}}. Jira: {{create-project.key}}."
consumes:
- type: http
namespace: jira
baseUri: "https://hyatt.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: servicenow
baseUri: "https://hyatt.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/general/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Manages restaurant reservation waitlists by checking availability in OpenTable, sending SMS notifications to guests via Twilio when tables open, and logging in the POS system.
naftiko: "0.5"
info:
label: "Restaurant Reservation Waitlist Manager"
description: "Manages restaurant reservation waitlists by checking availability in OpenTable, sending SMS notifications to guests via Twilio when tables open, and logging in the POS system."
tags:
- food-and-beverage
- reservations
- twilio
capability:
exposes:
- type: mcp
namespace: restaurant-waitlist
port: 8080
tools:
- name: manage-waitlist
description: "Manage restaurant reservation waitlist."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: restaurant_id
in: body
type: string
description: "The restaurant ID."
- name: guest_phone
in: body
type: string
description: "Guest phone number."
- name: party_size
in: body
type: integer
description: "Party size."
steps:
- name: check-availability
type: call
call: "opentable.check-tables"
with:
restaurant: "{{restaurant_id}}"
party_size: "{{party_size}}"
- name: notify-guest
type: call
call: "twilio.send-sms"
with:
to: "{{guest_phone}}"
body: "Your table for {{party_size}} at Hyatt {{property_code}} is ready. Please proceed to the host stand. Expected wait: {{check-availability.wait_minutes}} min."
- name: log-seating
type: call
call: "pos-system.create-cover"
with:
restaurant: "{{restaurant_id}}"
party_size: "{{party_size}}"
table: "{{check-availability.assigned_table}}"
consumes:
- type: http
namespace: opentable
baseUri: "https://platform.opentable.com/api/v2"
authentication:
type: bearer
token: "$secrets.opentable_token"
resources:
- name: tables
path: "/restaurants/{{restaurant}}/availability"
inputParameters:
- name: restaurant
in: path
operations:
- name: check-tables
method: GET
- type: http
namespace: twilio
baseUri: "https://api.twilio.com/2010-04-01"
authentication:
type: basic
username: "$secrets.twilio_account_sid"
password: "$secrets.twilio_auth_token"
resources:
- name: messages
path: "/Accounts/$secrets.twilio_account_sid/Messages.json"
operations:
- name: send-sms
method: POST
- type: http
namespace: pos-system
baseUri: "https://pos.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.pos_token"
resources:
- name: covers
path: "/covers"
operations:
- name: create-cover
method: POST
Pulls daily revenue figures from Oracle Hospitality OPERA and returns property-level ADR, occupancy rate, and RevPAR for a given date range.
naftiko: "0.5"
info:
label: "Revenue Dashboard Data Retriever"
description: "Pulls daily revenue figures from Oracle Hospitality OPERA and returns property-level ADR, occupancy rate, and RevPAR for a given date range."
tags:
- revenue
- hospitality
- oracle
capability:
exposes:
- type: mcp
namespace: revenue-analytics
port: 8080
tools:
- name: get-revenue-metrics
description: "Retrieve ADR, occupancy, and RevPAR for a property over a date range."
inputParameters:
- name: property_code
in: body
type: string
description: "The Hyatt property code."
- 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: "opera.get-revenue-stats"
with:
property_code: "{{property_code}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: adr
type: string
mapping: "$.statistics.averageDailyRate"
- name: occupancy_rate
type: string
mapping: "$.statistics.occupancyPercentage"
- name: revpar
type: string
mapping: "$.statistics.revPAR"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: statistics
path: "/properties/{{property_code}}/statistics"
inputParameters:
- name: property_code
in: path
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: get-revenue-stats
method: GET
Retrieves the guest sentiment score and key themes from Revinate reputation management platform for a Hyatt property.
naftiko: "0.5"
info:
label: "Revinate Guest Sentiment Score"
description: "Retrieves the guest sentiment score and key themes from Revinate reputation management platform for a Hyatt property."
tags:
- guest-experience
- reputation
- revinate
capability:
exposes:
- type: mcp
namespace: guest-sentiment
port: 8080
tools:
- name: get-sentiment-score
description: "Get guest sentiment score from Revinate."
inputParameters:
- name: property_id
in: body
type: string
description: "The Revinate property ID."
call: "revinate.get-score"
with:
property: "{{property_id}}"
outputParameters:
- name: overall_score
type: number
mapping: "$.score.overall"
- name: top_positive_theme
type: string
mapping: "$.themes.positive[0]"
- name: top_negative_theme
type: string
mapping: "$.themes.negative[0]"
consumes:
- type: http
namespace: revinate
baseUri: "https://api.revinate.com/v2"
authentication:
type: bearer
token: "$secrets.revinate_token"
resources:
- name: scores
path: "/properties/{{property}}/sentiment"
inputParameters:
- name: property
in: path
operations:
- name: get-score
method: GET
When a Salesforce guest support case is escalated, creates a corresponding ServiceNow incident and links the two records for cross-platform tracking.
naftiko: "0.5"
info:
label: "Salesforce Case Escalation to ServiceNow"
description: "When a Salesforce guest support case is escalated, creates a corresponding ServiceNow incident and links the two records for cross-platform tracking."
tags:
- guest-services
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: case-escalation
port: 8080
tools:
- name: escalate-case
description: "Escalate a Salesforce case to ServiceNow and link the records."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID."
steps:
- name: get-case
type: call
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Escalated: {{get-case.Subject}}"
description: "{{get-case.Description}}"
priority: "{{get-case.Priority}}"
correlation_id: "{{case_id}}"
- name: update-case
type: call
call: "salesforce.update-case"
with:
case_id: "{{case_id}}"
servicenow_number: "{{create-incident.number}}"
status: "Escalated"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- name: update-case
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://hyatt.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 group booking details from Salesforce including room block size, contracted rate, and event dates.
naftiko: "0.5"
info:
label: "Salesforce Group Booking Lookup"
description: "Retrieves group booking details from Salesforce including room block size, contracted rate, and event dates."
tags:
- sales
- group-bookings
- salesforce
capability:
exposes:
- type: mcp
namespace: group-bookings
port: 8080
tools:
- name: get-group-booking
description: "Look up a group booking by opportunity ID."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
call: "salesforce.get-opportunity"
with:
id: "{{opportunity_id}}"
outputParameters:
- name: group_name
type: string
mapping: "$.Name"
- name: room_nights
type: integer
mapping: "$.Room_Nights__c"
- name: contracted_rate
type: number
mapping: "$.Contracted_Rate__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-opportunity
method: GET
Triggers a refresh of a Salesforce Lightning dashboard for hotel sales and returns the current snapshot data.
naftiko: "0.5"
info:
label: "Salesforce Lightning Dashboard Refresher"
description: "Triggers a refresh of a Salesforce Lightning dashboard for hotel sales and returns the current snapshot data."
tags:
- sales
- reporting
- salesforce-lightning
capability:
exposes:
- type: mcp
namespace: sales-dashboards
port: 8080
tools:
- name: refresh-dashboard
description: "Trigger and retrieve a Salesforce Lightning dashboard refresh."
inputParameters:
- name: dashboard_id
in: body
type: string
description: "The Salesforce dashboard ID."
call: "salesforce.refresh-dashboard"
with:
dashboard_id: "{{dashboard_id}}"
outputParameters:
- name: last_refreshed
type: string
mapping: "$.lastRefreshDate"
- name: components
type: string
mapping: "$.componentData"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hyatt.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: dashboards
path: "/analytics/dashboards/{{dashboard_id}}"
inputParameters:
- name: dashboard_id
in: path
operations:
- name: refresh-dashboard
method: PUT
Retrieves the general ledger balance for a property cost center from SAP Financials for a given fiscal period.
naftiko: "0.5"
info:
label: "SAP Property GL Balance Lookup"
description: "Retrieves the general ledger balance for a property cost center from SAP Financials for a given fiscal period."
tags:
- finance
- accounting
- sap
capability:
exposes:
- type: mcp
namespace: property-finance
port: 8080
tools:
- name: get-gl-balance
description: "Look up GL balance for a property cost center."
inputParameters:
- name: cost_center
in: body
type: string
description: "The property cost center code."
- name: fiscal_period
in: body
type: string
description: "Fiscal period in YYYY-MM."
call: "sap.get-balance"
with:
cost_center: "{{cost_center}}"
period: "{{fiscal_period}}"
outputParameters:
- name: revenue
type: number
mapping: "$.d.Revenue"
- name: expenses
type: number
mapping: "$.d.TotalExpenses"
- name: net_income
type: number
mapping: "$.d.NetIncome"
consumes:
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/ZFI_GL_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: balances
path: "/GLBalanceSet(CostCenter='{{cost_center}}',Period='{{period}}')"
inputParameters:
- name: cost_center
in: path
- name: period
in: path
operations:
- name: get-balance
method: GET
Retrieves a SAP purchase order for hotel procurement, returning vendor, total amount, delivery status, and line items.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Retrieves a SAP purchase order for hotel procurement, returning vendor, total amount, delivery status, and line items."
tags:
- procurement
- finance
- sap
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a SAP purchase order by PO number."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_amount
type: string
mapping: "$.d.TotalAmount"
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: delivery_date
type: string
mapping: "$.d.DeliveryDate"
consumes:
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Forecasts seasonal staffing needs by pulling booking pace from Opera PMS, historical headcount from Workday, and publishing hiring requisitions via the recruiting platform.
naftiko: "0.5"
info:
label: "Seasonal Staffing Forecast Pipeline"
description: "Forecasts seasonal staffing needs by pulling booking pace from Opera PMS, historical headcount from Workday, and publishing hiring requisitions via the recruiting platform."
tags:
- hr
- staffing
- oracle-cloud
- workday
capability:
exposes:
- type: mcp
namespace: staffing-forecast
port: 8080
tools:
- name: forecast-staffing
description: "Forecast seasonal staffing needs for a property."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: season
in: body
type: string
description: "Season (spring, summer, fall, winter)."
steps:
- name: get-booking-forecast
type: call
call: "opera.get-seasonal-forecast"
with:
property: "{{property_code}}"
season: "{{season}}"
- name: get-current-headcount
type: call
call: "workday.get-headcount"
with:
location: "property_{{property_code}}"
- name: create-requisitions
type: call
call: "recruiting.create-bulk-reqs"
with:
property: "{{property_code}}"
forecast_occupancy: "{{get-booking-forecast.avg_occupancy}}"
current_headcount: "{{get-current-headcount.count}}"
season: "{{season}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclecloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: forecast
path: "/properties/{{property}}/seasonal-forecast?season={{season}}"
inputParameters:
- name: property
in: path
- name: season
in: query
operations:
- name: get-seasonal-forecast
method: GET
- 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: "/headcount?location={{location}}"
inputParameters:
- name: location
in: query
operations:
- name: get-headcount
method: GET
- type: http
namespace: recruiting
baseUri: "https://recruiting.hyatt.com/api/v1"
authentication:
type: bearer
token: "$secrets.recruiting_token"
resources:
- name: requisitions
path: "/requisitions/bulk"
operations:
- name: create-bulk-reqs
method: POST
Sends personalized pre-arrival emails to guests via SendGrid with property details and upsell offers.
naftiko: "0.5"
info:
label: "SendGrid Guest Pre-Arrival Email"
description: "Sends personalized pre-arrival emails to guests via SendGrid with property details and upsell offers."
tags:
- guest-experience
- email
- sendgrid
capability:
exposes:
- type: mcp
namespace: pre-arrival-email
port: 8080
tools:
- name: send-pre-arrival
description: "Send a pre-arrival email to a guest."
inputParameters:
- name: guest_email
in: body
type: string
description: "Guest email address."
- name: guest_name
in: body
type: string
description: "Guest first name."
- name: property_name
in: body
type: string
description: "Property name."
- name: check_in_date
in: body
type: string
description: "Check-in date."
call: "sendgrid.send-email"
with:
to: "{{guest_email}}"
template_id: "pre_arrival"
dynamic_data:
name: "{{guest_name}}"
property: "{{property_name}}"
check_in: "{{check_in_date}}"
outputParameters:
- name: message_id
type: string
mapping: "$.messageId"
consumes:
- type: http
namespace: sendgrid
baseUri: "https://api.sendgrid.com/v3"
authentication:
type: bearer
token: "$secrets.sendgrid_api_key"
resources:
- name: mail
path: "/mail/send"
operations:
- name: send-email
method: POST
Retrieves a ServiceNow incident by number and returns its current state, assigned group, priority, and resolution notes.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves a ServiceNow incident by number and returns its current state, assigned group, priority, and resolution notes."
tags:
- it-operations
- servicenow
capability:
exposes:
- type: mcp
namespace: incident-status
port: 8080
tools:
- name: get-incident-status
description: "Look up a ServiceNow incident by number and return key fields."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., INC0012345)."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: assigned_to
type: string
mapping: "$.result.assigned_to.display_value"
- name: priority
type: string
mapping: "$.result.priority"
- name: resolution_notes
type: string
mapping: "$.result.close_notes"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hyatt.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: sysparm_query
in: query
value: "number={{incident_number}}"
operations:
- name: get-incident
method: GET
Retrieves a document from a property's SharePoint site by file name and path, returning the download URL and metadata.
naftiko: "0.5"
info:
label: "SharePoint Property Document Retriever"
description: "Retrieves a document from a property's SharePoint site by file name and path, returning the download URL and metadata."
tags:
- documents
- property-management
- sharepoint
capability:
exposes:
- type: mcp
namespace: property-docs
port: 8080
tools:
- name: get-property-document
description: "Retrieve a document from a property's SharePoint site."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID for the property."
- name: file_path
in: body
type: string
description: "Path to the file within the document library."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
outputParameters:
- name: download_url
type: string
mapping: "$.@microsoft.graph.downloadUrl"
- name: file_name
type: string
mapping: "$.name"
- name: last_modified
type: string
mapping: "$.lastModifiedDateTime"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file
method: GET
Sends operational notifications to property-specific Slack channels for real-time team communication.
naftiko: "0.5"
info:
label: "Slack Property Operations Notifier"
description: "Sends operational notifications to property-specific Slack channels for real-time team communication."
tags:
- communications
- operations
- slack
capability:
exposes:
- type: mcp
namespace: property-notifications
port: 8080
tools:
- name: send-property-notification
description: "Send an operational notification to a property Slack channel."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: message
in: body
type: string
description: "The notification message."
call: "slack.post-message"
with:
channel: "property-{{property_code}}-ops"
text: "{{message}}"
outputParameters:
- name: message_ts
type: string
mapping: "$.ts"
consumes:
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Executes a predefined analytics query against the Hyatt Snowflake data warehouse to retrieve guest stay history, spend patterns, and loyalty metrics.
naftiko: "0.5"
info:
label: "Snowflake Guest Analytics Query"
description: "Executes a predefined analytics query against the Hyatt Snowflake data warehouse to retrieve guest stay history, spend patterns, and loyalty metrics."
tags:
- analytics
- data
- snowflake
capability:
exposes:
- type: mcp
namespace: guest-analytics
port: 8080
tools:
- name: query-guest-analytics
description: "Run a guest analytics query in Snowflake."
inputParameters:
- name: member_id
in: body
type: string
description: "The World of Hyatt loyalty member ID."
call: "snowflake.execute-query"
with:
statement: "SELECT total_stays, total_spend, avg_stay_duration, preferred_brand FROM GUEST_ANALYTICS.MEMBER_SUMMARY WHERE member_id = '{{member_id}}'"
outputParameters:
- name: total_stays
type: string
mapping: "$.data[0][0]"
- name: total_spend
type: string
mapping: "$.data[0][1]"
- name: avg_stay_duration
type: string
mapping: "$.data[0][2]"
- name: preferred_brand
type: string
mapping: "$.data[0][3]"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hyatt.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Queries Snowflake for RevPAR, occupancy rate, and ADR metrics by property and date range.
naftiko: "0.5"
info:
label: "Snowflake RevPAR Analytics Query"
description: "Queries Snowflake for RevPAR, occupancy rate, and ADR metrics by property and date range."
tags:
- analytics
- revenue
- snowflake
capability:
exposes:
- type: mcp
namespace: revpar-analytics
port: 8080
tools:
- name: query-revpar
description: "Query RevPAR analytics from Snowflake."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: date_range
in: body
type: string
description: "Date range in YYYY-MM-DD/YYYY-MM-DD."
call: "snowflake.execute-query"
with:
statement: "SELECT revpar, occupancy_rate, adr FROM property_performance WHERE property_code = '{{property_code}}' AND date BETWEEN '{{date_range}}'"
outputParameters:
- name: results
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hyatt.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
When a spa appointment is booked through the OPERA POS module, sends a confirmation to the guest via WhatsApp and logs the appointment in Google Sheets for the spa manager.
naftiko: "0.5"
info:
label: "Spa Appointment Booking Notifier"
description: "When a spa appointment is booked through the OPERA POS module, sends a confirmation to the guest via WhatsApp and logs the appointment in Google Sheets for the spa manager."
tags:
- guest-services
- hospitality
- oracle
- whatsapp
- google-sheets
capability:
exposes:
- type: mcp
namespace: spa-bookings
port: 8080
tools:
- name: notify-spa-booking
description: "Confirm a spa booking via WhatsApp and log it in Google Sheets."
inputParameters:
- name: appointment_id
in: body
type: string
description: "The OPERA spa appointment ID."
steps:
- name: get-appointment
type: call
call: "opera.get-spa-appointment"
with:
appointment_id: "{{appointment_id}}"
- name: send-confirmation
type: call
call: "whatsapp.send-message"
with:
phone: "{{get-appointment.guest_phone}}"
template: "spa_confirmation"
parameters: "{{get-appointment.service_name}},{{get-appointment.date_time}}"
- name: log-in-sheets
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "spa_schedule"
range: "Appointments!A:E"
values: "{{get-appointment.date_time}},{{get-appointment.guest_name}},{{get-appointment.service_name}},{{get-appointment.therapist}},{{get-appointment.amount}}"
consumes:
- type: http
namespace: opera
baseUri: "https://hyatt-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.opera_token"
resources:
- name: spa-appointments
path: "/spa/appointments/{{appointment_id}}"
inputParameters:
- name: appointment_id
in: path
operations:
- name: get-spa-appointment
method: GET
- type: http
namespace: whatsapp
baseUri: "https://graph.facebook.com/v17.0"
authentication:
type: bearer
token: "$secrets.whatsapp_token"
resources:
- name: messages
path: "/{{phone_number_id}}/messages"
inputParameters:
- name: phone_number_id
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
Manages end-to-end spa appointment booking across Hyatt properties, coordinating therapist availability, guest preferences, and confirmation notifications.
naftiko: "0.5"
info:
label: "Spa Appointment Booking Orchestrator"
description: "Manages end-to-end spa appointment booking across Hyatt properties, coordinating therapist availability, guest preferences, and confirmation notifications."
tags:
- hospitality
- spa-services
- booking
capability:
exposes:
- type: mcp
namespace: spa-booking
port: 8080
tools:
- name: book-spa-appointment
description: "Book a spa appointment for a hotel guest."
inputParameters:
- name: property_id
in: body
type: string
description: "The Hyatt property identifier."
- name: guest_id
in: body
type: string
description: "The guest loyalty profile ID."
- name: service_type
in: body
type: string
description: "Type of spa service requested."
- name: preferred_datetime
in: body
type: string
description: "Preferred appointment datetime in ISO 8601 format."
call: "spa-reservation-api.create-booking"
with:
property: "{{property_id}}"
guest: "{{guest_id}}"
service: "{{service_type}}"
datetime: "{{preferred_datetime}}"
outputParameters:
- name: confirmation_number
type: string
mapping: "$.booking.confirmationNumber"
- name: therapist_name
type: string
mapping: "$.booking.therapistAssigned"
- name: appointment_time
type: string
mapping: "$.booking.confirmedDatetime"
consumes:
- type: http
namespace: spa-reservation-api
baseUri: "https://api.hyatt.com/spa/v1"
authentication:
type: bearer
token: "$secrets.hyatt_spa_api_token"
resources:
- name: bookings
path: "/properties/{{property}}/bookings"
inputParameters:
- name: property
in: path
operations:
- name: create-booking
method: POST
Searches Splunk for guest Wi-Fi usage and authentication logs by property code and time range.
naftiko: "0.5"
info:
label: "Splunk Guest Wi-Fi Log Search"
description: "Searches Splunk for guest Wi-Fi usage and authentication logs by property code and time range."
tags:
- it
- network
- splunk
capability:
exposes:
- type: mcp
namespace: wifi-logs
port: 8080
tools:
- name: search-wifi-logs
description: "Search guest Wi-Fi logs in Splunk."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
- name: hours_back
in: body
type: integer
description: "Hours to search back."
call: "splunk.search"
with:
search: "search index=network property={{property_code}} source=wifi earliest=-{{hours_back}}h | stats count by status"
outputParameters:
- name: results
type: array
mapping: "$.results"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.hyatt.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: search
method: POST
Retrieves recent guest reviews and overall rating from TripAdvisor for a Hyatt property.
naftiko: "0.5"
info:
label: "TripAdvisor Property Review Monitor"
description: "Retrieves recent guest reviews and overall rating from TripAdvisor for a Hyatt property."
tags:
- guest-experience
- reviews
- tripadvisor
capability:
exposes:
- type: mcp
namespace: tripadvisor-reviews
port: 8080
tools:
- name: get-property-reviews
description: "Fetch recent TripAdvisor reviews for a property."
inputParameters:
- name: property_id
in: body
type: string
description: "The TripAdvisor location ID."
call: "tripadvisor.get-reviews"
with:
location_id: "{{property_id}}"
outputParameters:
- name: overall_rating
type: number
mapping: "$.rating"
- name: review_count
type: integer
mapping: "$.num_reviews"
- name: latest_review
type: string
mapping: "$.reviews[0].text"
consumes:
- type: http
namespace: tripadvisor
baseUri: "https://api.tripadvisor.com/api/partner/2.0"
authentication:
type: apiKey
key: "$secrets.tripadvisor_api_key"
resources:
- name: reviews
path: "/location/{{location_id}}/reviews"
inputParameters:
- name: location_id
in: path
operations:
- name: get-reviews
method: GET
Searches recent Twitter mentions of Hyatt brand handles and returns recent tweets, sentiment indicators, and engagement counts.
naftiko: "0.5"
info:
label: "Twitter Brand Mention Monitor"
description: "Searches recent Twitter mentions of Hyatt brand handles and returns recent tweets, sentiment indicators, and engagement counts."
tags:
- marketing
- social-media
- twitter
capability:
exposes:
- type: mcp
namespace: twitter-monitoring
port: 8080
tools:
- name: get-brand-mentions
description: "Search recent Twitter mentions of Hyatt brands."
inputParameters:
- name: query
in: body
type: string
description: "Twitter search query (e.g., @Hyatt OR #WorldOfHyatt)."
call: "twitter.search-tweets"
with:
query: "{{query}}"
outputParameters:
- name: tweets
type: string
mapping: "$.data"
- name: result_count
type: string
mapping: "$.meta.result_count"
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"
inputParameters:
- name: query
in: query
operations:
- name: search-tweets
method: GET
Processes vendor invoices by matching against SAP purchase orders, routing for approval in Workday, and posting the payment in Oracle Cloud Financials.
naftiko: "0.5"
info:
label: "Vendor Invoice Approval Pipeline"
description: "Processes vendor invoices by matching against SAP purchase orders, routing for approval in Workday, and posting the payment in Oracle Cloud Financials."
tags:
- finance
- accounts-payable
- sap
- workday
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: invoice-approval
port: 8080
tools:
- name: process-vendor-invoice
description: "Process and approve a vendor invoice."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The vendor invoice number."
- name: vendor_id
in: body
type: string
description: "The vendor ID."
steps:
- name: match-po
type: call
call: "sap.match-invoice-to-po"
with:
invoice: "{{invoice_number}}"
vendor: "{{vendor_id}}"
- name: route-approval
type: call
call: "workday.create-approval"
with:
type: "invoice_approval"
amount: "{{match-po.invoice_amount}}"
vendor: "{{vendor_id}}"
po_number: "{{match-po.po_number}}"
- name: post-payment
type: call
call: "oracle-financials.post-payment"
with:
invoice: "{{invoice_number}}"
amount: "{{match-po.invoice_amount}}"
approval_ref: "{{route-approval.approval_id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://hyatt-s4.sap.com/sap/opu/odata/sap/ZFI_AP_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/InvoiceMatchSet"
operations:
- name: match-invoice-to-po
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: approvals
path: "/approvals"
operations:
- name: create-approval
method: POST
- type: http
namespace: oracle-financials
baseUri: "https://hyatt-fa.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: payments
path: "/payablesPayments"
operations:
- name: post-payment
method: POST
Prepares for VIP guest arrivals by pulling loyalty profile from the WoH system, creating special requests in ALICE, and notifying the front desk via Slack.
naftiko: "0.5"
info:
label: "VIP Guest Arrival Preparation Orchestrator"
description: "Prepares for VIP guest arrivals by pulling loyalty profile from the WoH system, creating special requests in ALICE, and notifying the front desk via Slack."
tags:
- guest-experience
- vip
- slack
capability:
exposes:
- type: mcp
namespace: vip-arrival
port: 8080
tools:
- name: prepare-vip-arrival
description: "Prepare for a VIP guest arrival."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The reservation confirmation number."
- name: property_code
in: body
type: string
description: "The property code."
steps:
- name: get-loyalty-profile
type: call
call: "loyalty.get-member-profile"
with:
reservation_id: "{{reservation_id}}"
- name: create-amenity-request
type: call
call: "alice.create-request"
with:
reservation: "{{reservation_id}}"
type: "amenity_delivery"
description: "VIP amenity: {{get-loyalty-profile.tier}} tier welcome package. Preferences: {{get-loyalty-profile.preferences}}"
- name: notify-front-desk
type: call
call: "slack.post-message"
with:
channel: "property-{{property_code}}-front-desk"
text: "VIP arrival today: {{get-loyalty-profile.guest_name}} ({{get-loyalty-profile.tier}}). Reservation: {{reservation_id}}. Lifetime nights: {{get-loyalty-profile.lifetime_nights}}. Amenity request: {{create-amenity-request.request_id}}."
consumes:
- type: http
namespace: loyalty
baseUri: "https://loyalty.hyatt.com/api/v2"
authentication:
type: bearer
token: "$secrets.loyalty_token"
resources:
- name: profiles
path: "/reservations/{{reservation_id}}/member-profile"
inputParameters:
- name: reservation_id
in: path
operations:
- name: get-member-profile
method: GET
- type: http
namespace: alice
baseUri: "https://api.aliceapp.com/v1"
authentication:
type: bearer
token: "$secrets.alice_token"
resources:
- name: requests
path: "/requests"
operations:
- name: create-request
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves employee benefits enrollment details from Workday including health plan, 401k contribution, and PTO balance.
naftiko: "0.5"
info:
label: "Workday Employee Benefits Lookup"
description: "Retrieves employee benefits enrollment details from Workday including health plan, 401k contribution, and PTO balance."
tags:
- hr
- benefits
- workday
capability:
exposes:
- type: mcp
namespace: employee-benefits
port: 8080
tools:
- name: get-benefits
description: "Look up employee benefits enrollment."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: "workday.get-benefits"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: health_plan
type: string
mapping: "$.benefits.healthPlan"
- name: retirement_contribution
type: string
mapping: "$.benefits.retirementContribution"
- name: pto_balance
type: number
mapping: "$.benefits.ptoBalance"
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: "/workers/{{worker_id}}/benefits"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-benefits
method: GET
Retrieves a payroll summary for an employee from Workday, returning gross pay, net pay, deductions, and pay period.
naftiko: "0.5"
info:
label: "Workday Payroll Summary Retriever"
description: "Retrieves a payroll summary for an employee from Workday, returning gross pay, net pay, deductions, and pay period."
tags:
- hr
- payroll
- workday
capability:
exposes:
- type: mcp
namespace: payroll
port: 8080
tools:
- name: get-payroll-summary
description: "Retrieve the latest payroll summary for an employee."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-payslip"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: gross_pay
type: string
mapping: "$.payslip.grossPay"
- name: net_pay
type: string
mapping: "$.payslip.netPay"
- name: deductions
type: string
mapping: "$.payslip.totalDeductions"
- name: pay_period
type: string
mapping: "$.payslip.payPeriod"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: payslips
path: "/workers/{{worker_id}}/paySlips"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-payslip
method: GET
Retrieves video performance analytics from YouTube for Hyatt property promotional videos, returning views, watch time, and engagement rate.
naftiko: "0.5"
info:
label: "YouTube Property Video Performance Tracker"
description: "Retrieves video performance analytics from YouTube for Hyatt property promotional videos, returning views, watch time, and engagement rate."
tags:
- marketing
- social-media
- youtube
capability:
exposes:
- type: mcp
namespace: youtube-analytics
port: 8080
tools:
- name: get-video-performance
description: "Retrieve YouTube video performance metrics for a property video."
inputParameters:
- name: video_id
in: body
type: string
description: "The YouTube video ID."
call: "youtube.get-analytics"
with:
video_id: "{{video_id}}"
outputParameters:
- name: views
type: string
mapping: "$.items[0].statistics.viewCount"
- name: watch_time
type: string
mapping: "$.items[0].statistics.watchTimeMinutes"
- name: likes
type: string
mapping: "$.items[0].statistics.likeCount"
consumes:
- type: http
namespace: youtube
baseUri: "https://www.googleapis.com/youtube/v3"
authentication:
type: apiKey
name: "key"
in: query
value: "$secrets.youtube_api_key"
resources:
- name: videos
path: "/videos"
inputParameters:
- name: id
in: query
value: "{{video_id}}"
- name: part
in: query
value: "statistics"
operations:
- name: get-analytics
method: GET
Enriches a Salesforce account with firmographic data from ZoomInfo, updating company size, revenue, and industry classification for sales targeting.
naftiko: "0.5"
info:
label: "ZoomInfo Account Enrichment"
description: "Enriches a Salesforce account with firmographic data from ZoomInfo, updating company size, revenue, and industry classification for sales targeting."
tags:
- sales
- data-enrichment
- zoominfo
- salesforce
capability:
exposes:
- type: mcp
namespace: account-enrichment
port: 8080
tools:
- name: enrich-account
description: "Enrich a Salesforce account record with ZoomInfo firmographic data."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
- name: company_name
in: body
type: string
description: "Company name for ZoomInfo lookup."
steps:
- name: search-zoominfo
type: call
call: "zoominfo.search-company"
with:
company_name: "{{company_name}}"
- name: update-account
type: call
call: "salesforce.update-account"
with:
account_id: "{{account_id}}"
employees: "{{search-zoominfo.employeeCount}}"
revenue: "{{search-zoominfo.revenue}}"
industry: "{{search-zoominfo.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://hyatt.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