Marriott International Capabilities
Naftiko 0.5 capability definitions for Marriott International - 100 capabilities showing integration workflows and service orchestrations.
Retrieves booking funnel conversion data from Adobe Analytics for Marriott.com, returning step-by-step drop-off rates from search to confirmation.
naftiko: "0.5"
info:
label: "Adobe Analytics Booking Funnel Report"
description: "Retrieves booking funnel conversion data from Adobe Analytics for Marriott.com, returning step-by-step drop-off rates from search to confirmation."
tags:
- marketing
- adobe-analytics
- reporting
- hospitality
capability:
exposes:
- type: mcp
namespace: digital-analytics
port: 8080
tools:
- name: get-booking-funnel
description: "Given a date range, retrieve booking funnel conversion metrics from Adobe Analytics."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "adobe-analytics.get-funnel-report"
with:
report_suite: "marriott-booking"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: search_to_select_rate
type: string
mapping: "$.report.data.steps[0].conversion_rate"
- name: select_to_book_rate
type: string
mapping: "$.report.data.steps[1].conversion_rate"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api/marriott"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/reports"
operations:
- name: get-funnel-report
method: POST
Given a set of guest feedback records from Salesforce, uses an AI API to generate a concise summary of recurring complaint themes and posts the insight to the hotel operations Teams channel.
naftiko: "0.5"
info:
label: "AI-Assisted Guest Complaint Summarizer"
description: "Given a set of guest feedback records from Salesforce, uses an AI API to generate a concise summary of recurring complaint themes and posts the insight to the hotel operations Teams channel."
tags:
- ai
- guest-experience
- salesforce
- anthropic
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: ai-ops
port: 8080
tools:
- name: summarize-guest-complaints
description: "Given a property code and date range, retrieve guest complaint cases from Salesforce, pass them to the Anthropic Claude API for theme extraction and summarization, and post the resulting insight to the hotel operations Teams channel. Use for weekly operations reviews and quality management reporting."
inputParameters:
- name: property_code
in: body
type: string
description: "The Marriott property code to analyze guest complaints for."
- name: start_date
in: body
type: string
description: "Start date of the analysis window in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date of the analysis window in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID to post the AI-generated summary to."
steps:
- name: get-complaint-cases
type: call
call: "salesforce-complaints.get-cases"
with:
property_code: "{{property_code}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: generate-summary
type: call
call: "anthropic.create-message"
with:
model: "claude-3-5-sonnet-20241022"
prompt: "Summarize the following guest complaint cases from Marriott property {{property_code}} between {{start_date}} and {{end_date}}, identifying the top recurring themes and recommended actions: {{get-complaint-cases.cases}}"
- name: post-insight
type: call
call: "msteams-ai.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Guest Complaint Analysis for {{property_code}} ({{start_date}} to {{end_date}}): {{generate-summary.content}}"
consumes:
- type: http
namespace: salesforce-complaints
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/query"
operations:
- name: get-cases
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: msteams-ai
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
Verifies integrity and timeliness of data backups in Amazon S3, checking object counts and last modified timestamps.
naftiko: "0.5"
info:
label: "Amazon S3 Data Backup Verification"
description: "Verifies integrity and timeliness of data backups in Amazon S3, checking object counts and last modified timestamps."
tags:
- infrastructure
- amazon-s3
- data-protection
- compliance
capability:
exposes:
- type: mcp
namespace: backup-ops
port: 8080
tools:
- name: verify-s3-backup
description: "Given an S3 bucket and prefix, verify backup completeness."
inputParameters:
- name: bucket_name
in: body
type: string
description: "The S3 bucket name."
- name: prefix
in: body
type: string
description: "The S3 key prefix."
call: "s3.list-objects"
with:
bucket: "{{bucket_name}}"
prefix: "{{prefix}}"
outputParameters:
- name: object_count
type: string
mapping: "$.KeyCount"
consumes:
- type: http
namespace: s3
baseUri: "https://s3.amazonaws.com"
authentication:
type: aws-sigv4
access_key: "$secrets.aws_access_key"
secret_key: "$secrets.aws_secret_key"
resources:
- name: objects
path: "/{{bucket}}"
inputParameters:
- name: bucket
in: path
operations:
- name: list-objects
method: GET
Broadcasts operational alerts via Amazon SNS, creates ServiceNow incidents, and notifies Teams.
naftiko: "0.5"
info:
label: "Amazon SNS Operational Alert Publisher"
description: "Broadcasts operational alerts via Amazon SNS, creates ServiceNow incidents, and notifies Teams."
tags:
- operations
- amazon-sns
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: operational-alerts
port: 8080
tools:
- name: broadcast-alert
description: "Given alert details, publish to SNS, create incident, and notify Teams."
inputParameters:
- name: topic_arn
in: body
type: string
description: "The SNS topic ARN."
- name: subject
in: body
type: string
description: "Alert subject."
- name: message
in: body
type: string
description: "Alert message."
steps:
- name: publish-sns
type: call
call: "sns.publish"
with:
topic_arn: "{{topic_arn}}"
subject: "{{subject}}"
message: "{{message}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "{{subject}}"
description: "{{message}}"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "operations-center"
message: "{{subject}}: {{message}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: sns
baseUri: "https://sns.us-east-1.amazonaws.com"
authentication:
type: aws-sigv4
access_key: "$secrets.aws_access_key"
secret_key: "$secrets.aws_secret_key"
resources:
- name: topics
path: "/"
operations:
- name: publish
method: POST
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When an associate separation is processed in Workday, disables the Microsoft 365 account, revokes Okta sessions, and closes all open ServiceNow tickets assigned to that user.
naftiko: "0.5"
info:
label: "Associate Offboarding Workflow"
description: "When an associate separation is processed in Workday, disables the Microsoft 365 account, revokes Okta sessions, and closes all open ServiceNow tickets assigned to that user."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
- microsoft-365
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-associate-offboarding
description: "Given a Workday employee ID for a departing associate, disable their Microsoft 365 account, revoke all Okta sessions, and close open ServiceNow tickets. Invoke on confirmed separation or termination events."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID of the departing associate."
- name: separation_date
in: body
type: string
description: "The effective separation date in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday-lookup.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: disable-m365-user
type: call
call: "msgraph-offboard.disable-user"
with:
user_id: "{{get-worker.work_email}}"
- name: revoke-okta-sessions
type: call
call: "okta.clear-user-sessions"
with:
user_id: "{{get-worker.work_email}}"
- name: close-snow-tickets
type: call
call: "servicenow-offboard.close-user-tickets"
with:
assigned_to: "{{get-worker.work_email}}"
consumes:
- type: http
namespace: workday-lookup
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/marriott/workers/{worker_id}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: msgraph-offboard
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{user_id}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: okta
baseUri: "https://marriott.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-sessions
path: "/users/{user_id}/sessions"
inputParameters:
- name: user_id
in: path
operations:
- name: clear-user-sessions
method: DELETE
- type: http
namespace: servicenow-offboard
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: close-user-tickets
method: PATCH
When an associate's role changes in Workday, updates their Okta group assignments, adjusts their Microsoft 365 license tier, and notifies HR and the associate via Teams.
naftiko: "0.5"
info:
label: "Associate Role Change Workflow"
description: "When an associate's role changes in Workday, updates their Okta group assignments, adjusts their Microsoft 365 license tier, and notifies HR and the associate via Teams."
tags:
- hr
- identity
- workday
- okta
- microsoft-365
- role-change
capability:
exposes:
- type: mcp
namespace: hr-role-change
port: 8080
tools:
- name: process-role-change
description: "Given a Workday employee ID and new job role, update the associate's Okta application groups and Microsoft 365 license, then notify both the associate and HR via Teams. Invoke when a role change, promotion, or transfer is confirmed in Workday."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID of the associate changing roles."
- name: new_job_role
in: body
type: string
description: "The new job role code in Okta format."
- name: effective_date
in: body
type: string
description: "The effective date of the role change in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday-role.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: update-okta-groups
type: call
call: "okta-role.assign-group"
with:
user_id: "{{get-worker.work_email}}"
group_name: "{{new_job_role}}"
- name: notify-associate
type: call
call: "msteams-role.send-message"
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Your role has been updated to {{new_job_role}} effective {{effective_date}}. Your system access has been adjusted accordingly."
consumes:
- type: http
namespace: workday-role
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/marriott/workers/{worker_id}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta-role
baseUri: "https://marriott.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{group_id}/users/{user_id}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: assign-group
method: PUT
- type: http
namespace: msteams-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Initiates quarterly user access reviews in Azure AD, creates ServiceNow tracking tickets, and notifies the security team via Teams.
naftiko: "0.5"
info:
label: "Azure AD Access Review Trigger"
description: "Initiates quarterly user access reviews in Azure AD, creates ServiceNow tracking tickets, and notifies the security team via Teams."
tags:
- security
- azure-active-directory
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: identity-governance
port: 8080
tools:
- name: trigger-access-review
description: "Given an Azure AD application ID, create an access review and track via ServiceNow."
inputParameters:
- name: app_id
in: body
type: string
description: "The Azure AD application ID."
steps:
- name: create-review
type: call
call: "azuread.create-access-review"
with:
app_id: "{{app_id}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Access review initiated for app {{app_id}}"
category: "security_compliance"
- name: notify-security
type: call
call: "msteams.send-message"
with:
channel_id: "security-team"
message: "Access review created for app {{app_id}}. Review ID: {{create-review.id}}. Ticket: {{create-ticket.number}}"
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: access-reviews
path: "/identityGovernance/accessReviews/definitions"
operations:
- name: create-access-review
method: POST
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Audits Azure AD conditional access policies, generates compliance reports in SharePoint, and notifies security.
naftiko: "0.5"
info:
label: "Azure AD Conditional Access Audit"
description: "Audits Azure AD conditional access policies, generates compliance reports in SharePoint, and notifies security."
tags:
- security
- azure-active-directory
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: identity-security
port: 8080
tools:
- name: audit-conditional-access
description: "Retrieve conditional access policies and generate compliance report."
inputParameters:
- name: baseline_id
in: body
type: string
description: "Security baseline document ID."
steps:
- name: get-policies
type: call
call: "azuread.list-conditional-access-policies"
with: {}
- name: create-report
type: call
call: "sharepoint.create-item"
with:
site_id: "marriott-security"
list_name: "ComplianceReports"
fields:
report_type: "conditional-access-audit"
policy_count: "{{get-policies.value.length}}"
- name: notify-security
type: call
call: "msteams.send-message"
with:
channel_id: "security-governance"
message: "CA policy audit: {{get-policies.value.length}} policies reviewed. Report: {{create-report.webUrl}}"
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: conditional-access
path: "/identity/conditionalAccess/policies"
operations:
- name: list-conditional-access-policies
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: list-items
path: "/sites/{{site_id}}/lists/{{list_name}}/items"
inputParameters:
- name: site_id
in: path
- name: list_name
in: path
operations:
- name: create-item
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Detects Azure spending anomalies in a subscription, creates a ServiceNow change request to investigate, and alerts the FinOps team via Teams.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Responder"
description: "Detects Azure spending anomalies in a subscription, creates a ServiceNow change request to investigate, and alerts the FinOps team via Teams."
tags:
- cloud
- finops
- azure
- servicenow
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure subscription ID and a detected spend anomaly amount, create a ServiceNow change request for investigation and alert the FinOps Teams channel. Invoke when Azure Cost Management detects an unexpected spend spike."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the cost anomaly was detected."
- name: anomaly_amount
in: body
type: number
description: "The anomalous spend amount in USD above the expected baseline."
- name: service_name
in: body
type: string
description: "The Azure service or resource group responsible for the anomaly."
steps:
- name: create-change-request
type: call
call: "servicenow-change.create-change"
with:
short_description: "Azure cost anomaly: {{service_name}} — ${{anomaly_amount}} above baseline"
category: "cloud_cost"
subscription_id: "{{subscription_id}}"
- name: alert-finops
type: call
call: "msteams-finops.post-channel-message"
with:
channel_id: "finops-alerts"
text: "Cost Anomaly Detected: Azure {{service_name}} in subscription {{subscription_id}} is ${{anomaly_amount}} over budget. Change request: {{create-change-request.number}}"
consumes:
- type: http
namespace: servicenow-change
baseUri: "https://marriott.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-finops
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
Monitors Azure Data Factory pipeline runs, detects failures, and creates ServiceNow incidents with error details.
naftiko: "0.5"
info:
label: "Azure Data Factory Pipeline Monitor"
description: "Monitors Azure Data Factory pipeline runs, detects failures, and creates ServiceNow incidents with error details."
tags:
- data-engineering
- azure-data-factory
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-integration
port: 8080
tools:
- name: monitor-adf-pipeline
description: "Given an ADF pipeline name, check latest run and escalate failures."
inputParameters:
- name: pipeline_name
in: body
type: string
description: "The pipeline name."
- name: factory_name
in: body
type: string
description: "The factory name."
steps:
- name: get-runs
type: call
call: "adf.get-pipeline-runs"
with:
factory_name: "{{factory_name}}"
pipeline_name: "{{pipeline_name}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "ADF failure: {{pipeline_name}}"
category: "data_engineering"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "data-engineering"
message: "ADF {{pipeline_name}} - Status: {{get-runs.value[0].status}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: adf
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: pipeline-runs
path: "/subscriptions/{{sub_id}}/resourceGroups/marriott-data/providers/Microsoft.DataFactory/factories/{{factory_name}}/pipelineruns"
inputParameters:
- name: factory_name
in: path
operations:
- name: get-pipeline-runs
method: POST
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors Azure Databricks guest analytics pipeline runs, detects failures, and escalates via ServiceNow and Teams.
naftiko: "0.5"
info:
label: "Azure Databricks Guest Analytics Pipeline"
description: "Monitors Azure Databricks guest analytics pipeline runs, detects failures, and escalates via ServiceNow and Teams."
tags:
- data-engineering
- azure-databricks
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: monitor-guest-pipeline
description: "Given a Databricks job ID, check latest run status and escalate failures."
inputParameters:
- name: job_id
in: body
type: string
description: "The Databricks job ID."
steps:
- name: get-run
type: call
call: "databricks.get-latest-run"
with:
job_id: "{{job_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Databricks pipeline failure: job {{job_id}}"
category: "data_engineering"
assigned_to: "Data_Engineering"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "data-engineering"
message: "Pipeline failure: Job {{job_id}}. State: {{get-run.state.result_state}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: databricks
baseUri: "https://marriott-databricks.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/runs/list"
operations:
- name: get-latest-run
method: GET
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Tracks Azure Functions deployments, validates health, updates ServiceNow CMDB, and notifies dev team.
naftiko: "0.5"
info:
label: "Azure Functions Deployment Tracker"
description: "Tracks Azure Functions deployments, validates health, updates ServiceNow CMDB, and notifies dev team."
tags:
- engineering
- azure-functions
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: serverless-ops
port: 8080
tools:
- name: track-deployment
description: "Given a function app name, verify deployment health and update tracking."
inputParameters:
- name: function_app
in: body
type: string
description: "The Azure Function App name."
- name: deployment_id
in: body
type: string
description: "The deployment ID."
steps:
- name: get-deployment
type: call
call: "azure.get-deployment-status"
with:
function_app: "{{function_app}}"
deployment_id: "{{deployment_id}}"
- name: update-cmdb
type: call
call: "servicenow.update-ci"
with:
ci_name: "azure-func-{{function_app}}"
attributes:
version: "{{get-deployment.properties.version}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "engineering-deployments"
message: "Function {{function_app}} deployed. Status: {{get-deployment.properties.status}}"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: deployments
path: "/subscriptions/{{sub_id}}/resourceGroups/marriott-functions/providers/Microsoft.Web/sites/{{function_app}}/deployments/{{deployment_id}}"
inputParameters:
- name: function_app
in: path
- name: deployment_id
in: path
operations:
- name: get-deployment-status
method: GET
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: update-ci
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Responds to AKS pod scaling events by logging in Datadog, updating ServiceNow CMDB, and notifying platform engineering.
naftiko: "0.5"
info:
label: "Azure Kubernetes Scaling Handler"
description: "Responds to AKS pod scaling events by logging in Datadog, updating ServiceNow CMDB, and notifying platform engineering."
tags:
- infrastructure
- azure-kubernetes-service
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: platform-engineering
port: 8080
tools:
- name: handle-scaling-event
description: "Given AKS cluster and deployment details, process a scaling event."
inputParameters:
- name: cluster_name
in: body
type: string
description: "The AKS cluster name."
- name: deployment
in: body
type: string
description: "The deployment name."
- name: new_replicas
in: body
type: string
description: "New replica count."
steps:
- name: log-event
type: call
call: "datadog.create-event"
with:
title: "AKS Scaling: {{deployment}} in {{cluster_name}}"
text: "Scaled to {{new_replicas}} replicas"
- name: update-cmdb
type: call
call: "servicenow.update-ci"
with:
ci_name: "{{cluster_name}}-{{deployment}}"
attributes:
replica_count: "{{new_replicas}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "platform-engineering"
message: "AKS scaling: {{deployment}} in {{cluster_name}} scaled to {{new_replicas}} replicas."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: update-ci
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Azure Log Analytics for security events including failed logins and privilege escalations across Marriott cloud infrastructure.
naftiko: "0.5"
info:
label: "Azure Log Analytics Security Query"
description: "Queries Azure Log Analytics for security events including failed logins and privilege escalations across Marriott cloud infrastructure."
tags:
- security
- azure-log-analytics
- compliance
- monitoring
capability:
exposes:
- type: mcp
namespace: security-monitoring
port: 8080
tools:
- name: query-security-events
description: "Given a workspace ID and time range, retrieve security events."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Log Analytics workspace ID."
- name: time_range
in: body
type: string
description: "Time range: 1h, 12h, 24h."
call: "loganalytics.run-query"
with:
workspace_id: "{{workspace_id}}"
timespan: "{{time_range}}"
outputParameters:
- name: event_count
type: string
mapping: "$.tables[0].rows.length"
consumes:
- type: http
namespace: loganalytics
baseUri: "https://api.loganalytics.io/v1"
authentication:
type: bearer
token: "$secrets.azure_loganalytics_token"
resources:
- name: query
path: "/workspaces/{{workspace_id}}/query"
inputParameters:
- name: workspace_id
in: path
operations:
- name: run-query
method: POST
Triggers Azure ML pipeline for demand forecasts, stores results in Power BI, and notifies revenue management via Teams.
naftiko: "0.5"
info:
label: "Azure Machine Learning Demand Forecast"
description: "Triggers Azure ML pipeline for demand forecasts, stores results in Power BI, and notifies revenue management via Teams."
tags:
- data-science
- azure-machine-learning
- power-bi
- microsoft-teams
- revenue-management
capability:
exposes:
- type: mcp
namespace: revenue-intelligence
port: 8080
tools:
- name: run-demand-forecast
description: "Given a region and forecast horizon, trigger the ML demand forecast."
inputParameters:
- name: region
in: body
type: string
description: "Target region."
- name: horizon_days
in: body
type: string
description: "Forecast horizon in days."
steps:
- name: trigger-pipeline
type: call
call: "azureml.submit-pipeline-run"
with:
pipeline_id: "demand-forecast-v3"
parameters:
region: "{{region}}"
horizon: "{{horizon_days}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "demand-forecast-{{region}}"
- name: notify-revenue
type: call
call: "msteams.send-message"
with:
channel_id: "revenue-management"
message: "Demand forecast initiated for {{region}}. Pipeline: {{trigger-pipeline.run_id}}"
consumes:
- type: http
namespace: azureml
baseUri: "https://marriott-ml.api.azureml.ms"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: pipelines
path: "/pipelines/{{pipeline_id}}/submit"
inputParameters:
- name: pipeline_id
in: path
operations:
- name: submit-pipeline-run
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the status of scheduled backup jobs for critical hotel property systems in Datadog and creates a ServiceNow incident if any backups are found to have failed.
naftiko: "0.5"
info:
label: "Backup Verification Monitor"
description: "Checks the status of scheduled backup jobs for critical hotel property systems in Datadog and creates a ServiceNow incident if any backups are found to have failed."
tags:
- itsm
- infrastructure
- datadog
- servicenow
- backup
- monitoring
capability:
exposes:
- type: mcp
namespace: backup-monitoring
port: 8080
tools:
- name: verify-backup-status
description: "Given a Datadog monitor tag scoped to backup jobs, check for any failed backup monitors and automatically create a ServiceNow incident for each failure. Use for daily automated backup health checks across property systems."
inputParameters:
- name: backup_monitor_tag
in: body
type: string
description: "Datadog monitor tag used to identify backup job monitors (e.g., job:backup, env:production)."
- name: property_code
in: body
type: string
description: "Marriott property code to scope the backup check."
steps:
- name: get-backup-monitors
type: call
call: "datadog-backup.get-host-monitors"
with:
tags: "{{backup_monitor_tag}}"
- name: create-backup-incident
type: call
call: "servicenow-backup.create-incident"
with:
short_description: "Backup failure detected for property {{property_code}}"
category: "backup"
urgency: "2"
consumes:
- type: http
namespace: datadog-backup
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor"
operations:
- name: get-host-monitors
method: GET
- type: http
namespace: servicenow-backup
baseUri: "https://marriott.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 Marriott Bonvoy member tier status, point balance, and stay history from Salesforce for guest recognition.
naftiko: "0.5"
info:
label: "Bonvoy Loyalty Tier Lookup"
description: "Retrieves Marriott Bonvoy member tier status, point balance, and stay history from Salesforce for guest recognition."
tags:
- loyalty
- salesforce
- guest-experience
- hospitality
capability:
exposes:
- type: mcp
namespace: loyalty
port: 8080
tools:
- name: get-bonvoy-status
description: "Given a Bonvoy member number, retrieve tier status and points from Salesforce."
inputParameters:
- name: member_number
in: body
type: string
description: "The Bonvoy membership number."
call: "salesforce.get-member"
with:
member_number: "{{member_number}}"
outputParameters:
- name: tier
type: string
mapping: "$.records[0].Tier_Status__c"
- name: points_balance
type: string
mapping: "$.records[0].Points_Balance__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: get-member
method: GET
After a qualifying Bonvoy member stay completes, triggers a post-stay NPS survey via Salesforce Marketing Cloud and logs the contact interaction.
naftiko: "0.5"
info:
label: "Bonvoy Member NPS Survey Trigger"
description: "After a qualifying Bonvoy member stay completes, triggers a post-stay NPS survey via Salesforce Marketing Cloud and logs the contact interaction."
tags:
- crm
- guest-experience
- salesforce
- nps
- marketing
capability:
exposes:
- type: mcp
namespace: guest-feedback
port: 8080
tools:
- name: trigger-post-stay-survey
description: "Given a Salesforce contact ID and stay completion details, send a post-stay NPS survey via Salesforce Marketing Cloud and update the contact record with the survey send date. Use within 24 hours of a guest checkout for qualifying Bonvoy members."
inputParameters:
- name: contact_id
in: body
type: string
description: "The Salesforce contact ID of the departed guest."
- name: property_code
in: body
type: string
description: "The Marriott property code where the stay occurred."
- name: checkout_date
in: body
type: string
description: "The actual checkout date in YYYY-MM-DD format."
steps:
- name: send-survey
type: call
call: "sfmc.trigger-journey"
with:
contact_id: "{{contact_id}}"
journey_name: "PostStay_NPS"
property_code: "{{property_code}}"
checkout_date: "{{checkout_date}}"
- name: update-contact
type: call
call: "salesforce-nps.update-contact"
with:
contact_id: "{{contact_id}}"
nps_survey_sent_date: "{{checkout_date}}"
consumes:
- type: http
namespace: sfmc
baseUri: "https://mc.marriott.com/interaction/v1"
authentication:
type: bearer
token: "$secrets.sfmc_token"
resources:
- name: journeys
path: "/interactions/contactEvents"
operations:
- name: trigger-journey
method: POST
- type: http
namespace: salesforce-nps
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{contact_id}"
inputParameters:
- name: contact_id
in: path
operations:
- name: update-contact
method: PATCH
Retrieves vendor contract documents from Box by contract ID or vendor name, returning file metadata and download links.
naftiko: "0.5"
info:
label: "Box Vendor Contract Retrieval"
description: "Retrieves vendor contract documents from Box by contract ID or vendor name, returning file metadata and download links."
tags:
- legal
- box
- document-management
- procurement
capability:
exposes:
- type: mcp
namespace: contract-management
port: 8080
tools:
- name: get-contract-document
description: "Given a vendor name or contract ID, retrieve contract documents from Box."
inputParameters:
- name: search_term
in: body
type: string
description: "Vendor name or contract ID."
call: "box.search-files"
with:
query: "{{search_term}}"
ancestor_folder_ids: "vendor-contracts"
outputParameters:
- name: file_name
type: string
mapping: "$.entries[0].name"
- name: download_url
type: string
mapping: "$.entries[0].shared_link.download_url"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: search
path: "/search"
operations:
- name: search-files
method: GET
Synchronizes approved brand templates from Canva to SharePoint for property marketing teams.
naftiko: "0.5"
info:
label: "Canva Brand Template Sync"
description: "Synchronizes approved brand templates from Canva to SharePoint for property marketing teams."
tags:
- marketing
- canva
- sharepoint
- brand-management
capability:
exposes:
- type: mcp
namespace: brand-assets
port: 8080
tools:
- name: sync-brand-templates
description: "Given a Canva folder ID, sync templates to SharePoint."
inputParameters:
- name: folder_id
in: body
type: string
description: "The Canva folder ID."
- name: brand
in: body
type: string
description: "The brand name."
steps:
- name: get-designs
type: call
call: "canva.list-designs"
with:
folder_id: "{{folder_id}}"
- name: upload-to-sharepoint
type: call
call: "sharepoint.upload-file"
with:
site_id: "marriott-brand-assets"
folder_path: "Templates/{{brand}}"
- name: notify-marketing
type: call
call: "msteams.send-message"
with:
channel_id: "brand-{{brand}}-marketing"
message: "{{get-designs.total_count}} templates synced for {{brand}}."
consumes:
- type: http
namespace: canva
baseUri: "https://api.canva.com/rest/v1"
authentication:
type: bearer
token: "$secrets.canva_token"
resources:
- name: designs
path: "/folders/{{folder_id}}/items"
inputParameters:
- name: folder_id
in: path
operations:
- name: list-designs
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive
path: "/sites/{{site_id}}/drive/root:/{{folder_path}}:/children"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Monitors Cisco wireless controllers for guest WiFi performance at Marriott properties.
naftiko: "0.5"
info:
label: "Cisco Property WiFi Monitor"
description: "Monitors Cisco wireless controllers for guest WiFi performance at Marriott properties."
tags:
- infrastructure
- cisco
- monitoring
- hospitality
capability:
exposes:
- type: mcp
namespace: network-ops
port: 8080
tools:
- name: monitor-guest-wifi
description: "Given a property code, retrieve guest WiFi metrics."
inputParameters:
- name: property_code
in: body
type: string
description: "The property code."
call: "cisco.get-network-summary"
with:
network_name: "MarriottGuest-{{property_code}}"
outputParameters:
- name: connected_clients
type: string
mapping: "$.summary.client_count"
consumes:
- type: http
namespace: cisco
baseUri: "https://marriott-cisco.meraki.com/api/v1"
authentication:
type: apiKey
key: "$secrets.cisco_meraki_key"
resources:
- name: networks
path: "/networks/{{network_name}}/clients"
inputParameters:
- name: network_name
in: path
operations:
- name: get-network-summary
method: GET
Monitors Cloudflare WAF events for Marriott web properties, escalating blocked threats via ServiceNow incidents and Teams alerts.
naftiko: "0.5"
info:
label: "Cloudflare Web Application Firewall Monitor"
description: "Monitors Cloudflare WAF events for Marriott web properties, escalating blocked threats via ServiceNow incidents and Teams alerts."
tags:
- security
- cloudflare
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: web-security
port: 8080
tools:
- name: monitor-waf-events
description: "Given a Cloudflare zone ID, retrieve recent WAF events and escalate critical blocks."
inputParameters:
- name: zone_id
in: body
type: string
description: "The Cloudflare zone ID."
steps:
- name: get-events
type: call
call: "cloudflare.get-waf-events"
with:
zone_id: "{{zone_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "WAF blocked {{get-events.total_blocked}} threats on zone {{zone_id}}"
category: "security_incident"
assigned_to: "Security_Operations"
- name: alert-secops
type: call
call: "msteams.send-message"
with:
channel_id: "security-operations"
message: "WAF Alert: {{get-events.total_blocked}} blocked events on zone {{zone_id}} in last hour. Top rule: {{get-events.top_rule}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: firewall-events
path: "/zones/{{zone_id}}/firewall/events"
inputParameters:
- name: zone_id
in: path
operations:
- name: get-waf-events
method: GET
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a SAP Concur expense report is submitted by an associate, notifies their manager via Microsoft Teams with a direct link to review and approve.
naftiko: "0.5"
info:
label: "Concur Expense Report Approval Notifier"
description: "When a SAP Concur expense report is submitted by an associate, notifies their manager via Microsoft Teams with a direct link to review and approve."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: expense-approvals
port: 8080
tools:
- name: notify-expense-approver
description: "Given an expense report ID and approver UPN, retrieve the expense report details from SAP Concur and send the approver a Teams message with a summary and approval link. Use when an associate submits a travel or business expense report."
inputParameters:
- name: expense_report_id
in: body
type: string
description: "The SAP Concur expense report ID requiring approval."
- name: approver_upn
in: body
type: string
description: "UPN of the manager who needs to approve the expense report."
steps:
- name: get-expense-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{expense_report_id}}"
- name: notify-approver
type: call
call: "msteams-expense.send-message"
with:
recipient_upn: "{{approver_upn}}"
text: "Expense approval required: Report {{expense_report_id}} submitted by {{get-expense-report.employee_name}} for ${{get-expense-report.total_amount}} ({{get-expense-report.purpose}}). Approve at: {{get-expense-report.approval_url}}"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{report_id}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: msteams-expense
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
When brand standards are updated in Confluence, sends Teams notifications and creates SharePoint tracking entries for acknowledgment.
naftiko: "0.5"
info:
label: "Confluence Brand Standards Updater"
description: "When brand standards are updated in Confluence, sends Teams notifications and creates SharePoint tracking entries for acknowledgment."
tags:
- operations
- confluence
- microsoft-teams
- sharepoint
capability:
exposes:
- type: mcp
namespace: brand-operations
port: 8080
tools:
- name: notify-brand-update
description: "Given a Confluence page ID, notify affected teams and track acknowledgments."
inputParameters:
- name: page_id
in: body
type: string
description: "The Confluence page ID."
- name: brand
in: body
type: string
description: "The Marriott brand name."
steps:
- name: get-page
type: call
call: "confluence.get-page"
with:
page_id: "{{page_id}}"
- name: notify-teams
type: call
call: "msteams.send-message"
with:
channel_id: "brand-{{brand}}-operations"
message: "Brand standards updated: {{get-page.title}}. Please review."
- name: create-tracker
type: call
call: "sharepoint.create-item"
with:
site_id: "marriott-brand-standards"
list_name: "AcknowledgmentTracker"
fields:
page_title: "{{get-page.title}}"
brand: "{{brand}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://marriott.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: list-items
path: "/sites/{{site_id}}/lists/{{list_name}}/items"
inputParameters:
- name: site_id
in: path
- name: list_name
in: path
operations:
- name: create-item
method: POST
Queries Datadog for application latency metrics across Marriott booking and loyalty platforms.
naftiko: "0.5"
info:
label: "Datadog Application Latency Check"
description: "Queries Datadog for application latency metrics across Marriott booking and loyalty platforms."
tags:
- monitoring
- datadog
- infrastructure
- performance
capability:
exposes:
- type: mcp
namespace: platform-monitoring
port: 8080
tools:
- name: check-app-latency
description: "Given a service name, retrieve latency percentiles."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name."
- name: time_window
in: body
type: string
description: "Time window: 1h, 6h, 24h."
call: "datadog.query-metrics"
with:
query: "avg:trace.http.request.duration{service:{{service_name}}}"
from: "{{time_window}}"
outputParameters:
- name: p99_ms
type: string
mapping: "$.series[0].pointlist[-1][1]"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
Queries Datadog for the current health status of a named host or service and returns monitor states for use in operational dashboards.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Health Check"
description: "Queries Datadog for the current health status of a named host or service and returns monitor states for use in operational dashboards."
tags:
- observability
- datadog
- monitoring
- infrastructure
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-host-health
description: "Given a hostname, retrieve all active Datadog monitors and their current states for that host. Use when investigating an outage, during on-call triage, or to populate operational status dashboards."
inputParameters:
- name: hostname
in: body
type: string
description: "The fully qualified hostname or service name to check in Datadog."
call: "datadog.get-host-monitors"
with:
host: "{{hostname}}"
outputParameters:
- name: monitors
type: array
mapping: "$.monitors"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: host-monitors
path: "/monitor"
operations:
- name: get-host-monitors
method: GET
Retrieves SLO compliance data from Datadog for all critical hotel systems and publishes a weekly compliance summary to the IT leadership Teams channel.
naftiko: "0.5"
info:
label: "Datadog SLO Compliance Report"
description: "Retrieves SLO compliance data from Datadog for all critical hotel systems and publishes a weekly compliance summary to the IT leadership Teams channel."
tags:
- observability
- datadog
- slo
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: slo-reporting
port: 8080
tools:
- name: publish-slo-report
description: "Given a Datadog SLO tag filter and a Teams channel ID, retrieve all SLO compliance results for the past 7 days and post a compliance summary. Use for weekly IT reliability reviews, vendor SLA checks, and executive reporting."
inputParameters:
- name: slo_tag_filter
in: body
type: string
description: "Datadog tag filter to scope which SLOs to report on (e.g., env:production, team:hotel-systems)."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID to post the SLO compliance report to."
steps:
- name: get-slo-status
type: call
call: "datadog-slo.get-slos"
with:
tags_query: "{{slo_tag_filter}}"
- name: post-report
type: call
call: "msteams-slo.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Weekly SLO Compliance Report: {{get-slo-status.compliant_count}} SLOs meeting target, {{get-slo-status.breached_count}} breaching SLOs detected. Filter: {{slo_tag_filter}}."
consumes:
- type: http
namespace: datadog-slo
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo"
operations:
- name: get-slos
method: GET
- type: http
namespace: msteams-slo
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{team_id}/channels/{channel_id}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves real user monitoring data from Dynatrace for Marriott's booking platform, returning page load times and user satisfaction scores.
naftiko: "0.5"
info:
label: "Dynatrace Booking Platform Monitor"
description: "Retrieves real user monitoring data from Dynatrace for Marriott's booking platform, returning page load times and user satisfaction scores."
tags:
- monitoring
- dynatrace
- performance
- digital-experience
capability:
exposes:
- type: mcp
namespace: digital-experience
port: 8080
tools:
- name: get-rum-report
description: "Given an application name, retrieve RUM metrics from Dynatrace."
inputParameters:
- name: application_name
in: body
type: string
description: "The Dynatrace application name."
call: "dynatrace.get-rum-metrics"
with:
application_name: "{{application_name}}"
outputParameters:
- name: apdex_score
type: string
mapping: "$.result[0].data[0].values[0]"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://marriott.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: metrics
path: "/metrics/query"
operations:
- name: get-rum-metrics
method: GET
Checks F5 load balancer pool member health for Marriott booking platforms.
naftiko: "0.5"
info:
label: "F5 Load Balancer Health Check"
description: "Checks F5 load balancer pool member health for Marriott booking platforms."
tags:
- infrastructure
- f5-networks
- monitoring
- networking
capability:
exposes:
- type: mcp
namespace: network-infrastructure
port: 8080
tools:
- name: check-pool-status
description: "Given an F5 pool name, retrieve member health."
inputParameters:
- name: pool_name
in: body
type: string
description: "The F5 pool name."
call: "f5.get-pool-members"
with:
pool_name: "{{pool_name}}"
outputParameters:
- name: total_members
type: string
mapping: "$.items.length"
- name: active_members
type: string
mapping: "$.active_count"
consumes:
- type: http
namespace: f5
baseUri: "https://marriott-f5.com/mgmt/tm"
authentication:
type: basic
username: "$secrets.f5_user"
password: "$secrets.f5_password"
resources:
- name: pools
path: "/ltm/pool/{{pool_name}}/members"
inputParameters:
- name: pool_name
in: path
operations:
- name: get-pool-members
method: GET
Retrieves Facebook ad campaign performance metrics for Marriott brand campaigns including impressions, clicks, and cost per acquisition.
naftiko: "0.5"
info:
label: "Facebook Ad Campaign Tracker"
description: "Retrieves Facebook ad campaign performance metrics for Marriott brand campaigns including impressions, clicks, and cost per acquisition."
tags:
- marketing
- facebook
- advertising
- reporting
capability:
exposes:
- type: mcp
namespace: paid-media
port: 8080
tools:
- name: get-campaign-performance
description: "Given a campaign ID, retrieve performance metrics."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The 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"
consumes:
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_token"
resources:
- name: insights
path: "/{{campaign_id}}/insights"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign-insights
method: GET
When a GitHub Actions workflow fails on a protected branch, creates a Jira bug, posts a Datadog deployment event, and alerts the engineering Teams channel.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Handler"
description: "When a GitHub Actions workflow fails on a protected branch, creates a Jira bug, posts a Datadog deployment event, and alerts the engineering Teams channel."
tags:
- devops
- cicd
- github
- jira
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions workflow failure event with repo, branch, commit SHA, and run URL, create a Jira bug, post a Datadog event, and alert the engineering Teams channel. Invoke on any protected-branch pipeline failure."
inputParameters:
- name: repository
in: body
type: string
description: "GitHub repository name in org/repo format."
- name: branch
in: body
type: string
description: "The branch name where the failure occurred."
- name: commit_sha
in: body
type: string
description: "The Git commit SHA of the failing run."
- name: run_url
in: body
type: string
description: "Direct URL to the failing GitHub Actions run."
- name: workflow_name
in: body
type: string
description: "Name of the failing GitHub Actions workflow."
steps:
- name: create-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repository}} / {{branch}} — {{workflow_name}}"
description: "Branch: {{branch}}\nCommit: {{commit_sha}}\nRun: {{run_url}}"
- name: post-datadog-event
type: call
call: "datadog-events.create-event"
with:
title: "CI Failure: {{repository}}"
text: "Workflow {{workflow_name}} failed on {{branch}} at {{commit_sha}}"
alert_type: "error"
- name: alert-teams
type: call
call: "msteams-eng.post-channel-message"
with:
channel_id: "engineering-alerts"
text: "Pipeline Failure: {{repository}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Jira: {{create-bug.key}} | Run: {{run_url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://marriott.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: datadog-events
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams-eng
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
Retrieves open pull requests from a GitHub repository and checks Snyk for known vulnerabilities in the changed dependencies.
naftiko: "0.5"
info:
label: "GitHub Pull Request Security Scan"
description: "Retrieves open pull requests from a GitHub repository and checks Snyk for known vulnerabilities in the changed dependencies."
tags:
- devops
- security
- github
- snyk
- code-quality
capability:
exposes:
- type: mcp
namespace: security-scanning
port: 8080
tools:
- name: scan-pr-dependencies
description: "Given a GitHub repository and pull request number, retrieve the list of changed files and run a Snyk dependency vulnerability scan. Returns a summary of any critical or high vulnerabilities found. Use during code review and pre-merge gates."
inputParameters:
- name: repository
in: body
type: string
description: "GitHub repository in org/repo format."
- name: pr_number
in: body
type: integer
description: "The pull request number to scan."
steps:
- name: get-pr-files
type: call
call: "github.get-pr-files"
with:
repo: "{{repository}}"
pr_number: "{{pr_number}}"
- name: run-snyk-scan
type: call
call: "snyk.test-project"
with:
org: "marriott"
project: "{{repository}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pr-files
path: "/repos/{owner}/{repo}/pulls/{pull_number}/files"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: pull_number
in: path
operations:
- name: get-pr-files
method: GET
- type: http
namespace: snyk
baseUri: "https://api.snyk.io/rest"
authentication:
type: bearer
token: "$secrets.snyk_token"
resources:
- name: projects
path: "/orgs/{org_id}/projects"
inputParameters:
- name: org_id
in: path
operations:
- name: test-project
method: GET
Lists all members of a GitHub organization repository with their permission levels and cross-references against active associates in Okta to identify access anomalies.
naftiko: "0.5"
info:
label: "GitHub Repository Access Audit"
description: "Lists all members of a GitHub organization repository with their permission levels and cross-references against active associates in Okta to identify access anomalies."
tags:
- security
- devops
- github
- okta
- access-audit
capability:
exposes:
- type: mcp
namespace: access-audit
port: 8080
tools:
- name: audit-repo-access
description: "Given a GitHub organization and repository name, retrieve all collaborators and their permission levels, then cross-reference with active Okta users to flag any external or deprovisioned accounts with remaining access. Use for quarterly access reviews and compliance audits."
inputParameters:
- name: github_org
in: body
type: string
description: "The GitHub organization name."
- name: repository
in: body
type: string
description: "The repository name to audit collaborator access for."
steps:
- name: get-collaborators
type: call
call: "github-audit.get-repo-collaborators"
with:
org: "{{github_org}}"
repo: "{{repository}}"
- name: get-active-okta-users
type: call
call: "okta-audit.list-active-users"
with:
filter: "status eq ACTIVE"
consumes:
- type: http
namespace: github-audit
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: collaborators
path: "/repos/{owner}/{repo}/collaborators"
inputParameters:
- name: owner
in: path
- name: repo
in: path
operations:
- name: get-repo-collaborators
method: GET
- type: http
namespace: okta-audit
baseUri: "https://marriott.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: list-active-users
method: GET
Pulls weekly website traffic metrics from Google Analytics for Marriott brand sites, then sends a summary to a Teams channel.
naftiko: "0.5"
info:
label: "Google Analytics Website Traffic Digest"
description: "Pulls weekly website traffic metrics from Google Analytics for Marriott brand sites, then sends a summary to a Teams channel."
tags:
- marketing
- google-analytics
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: digital-marketing
port: 8080
tools:
- name: generate-traffic-digest
description: "Given a brand site identifier, pull weekly traffic metrics and post a digest to Teams."
inputParameters:
- name: property_id
in: body
type: string
description: "The Google Analytics property ID."
steps:
- name: get-traffic
type: call
call: "google-analytics.get-report"
with:
property_id: "{{property_id}}"
date_range: "last_7_days"
metrics: "sessions,bounceRate,goalConversionRate"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "digital-marketing-team"
message: "Weekly Traffic: Sessions: {{get-traffic.sessions}}, Bounce Rate: {{get-traffic.bounceRate}}%, Conversion: {{get-traffic.goalConversionRate}}%"
consumes:
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: get-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves property operational documents and templates from Google Drive shared folders.
naftiko: "0.5"
info:
label: "Google Drive Property Documents"
description: "Retrieves property operational documents and templates from Google Drive shared folders."
tags:
- operations
- google-drive
- document-management
- hospitality
capability:
exposes:
- type: mcp
namespace: property-ops
port: 8080
tools:
- name: get-property-documents
description: "Given a property ID, retrieve associated documents from Google Drive."
inputParameters:
- name: property_id
in: body
type: string
description: "The property identifier."
call: "google-drive.list-files"
with:
folder_id: "property-{{property_id}}"
outputParameters:
- name: document_count
type: string
mapping: "$.files.length"
consumes:
- type: http
namespace: google-drive
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files"
operations:
- name: list-files
method: GET
Retrieves guest feedback from Google Forms and syncs results to Salesforce.
naftiko: "0.5"
info:
label: "Google Forms Guest Feedback Sync"
description: "Retrieves guest feedback from Google Forms and syncs results to Salesforce."
tags:
- guest-experience
- google-forms
- salesforce
- feedback
capability:
exposes:
- type: mcp
namespace: guest-feedback
port: 8080
tools:
- name: sync-feedback
description: "Given a form ID, retrieve responses and sync to Salesforce."
inputParameters:
- name: form_id
in: body
type: string
description: "The Google Forms form ID."
steps:
- name: get-responses
type: call
call: "google-forms.get-responses"
with:
form_id: "{{form_id}}"
- name: sync-to-salesforce
type: call
call: "salesforce.create-records"
with:
object: "Guest_Feedback__c"
records: "{{get-responses.responses}}"
consumes:
- type: http
namespace: google-forms
baseUri: "https://forms.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_forms_token"
resources:
- name: responses
path: "/forms/{{form_id}}/responses"
inputParameters:
- name: form_id
in: path
operations:
- name: get-responses
method: GET
- type: http
namespace: salesforce
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: composite
path: "/composite/sobjects"
operations:
- name: create-records
method: POST
Retrieves Google Maps business listing data for a Marriott property, checking accuracy of address, phone, and ratings.
naftiko: "0.5"
info:
label: "Google Maps Property Listing Audit"
description: "Retrieves Google Maps business listing data for a Marriott property, checking accuracy of address, phone, and ratings."
tags:
- marketing
- google-maps
- hospitality
- operations
capability:
exposes:
- type: mcp
namespace: property-marketing
port: 8080
tools:
- name: audit-property-listing
description: "Given a Place ID, retrieve listing details for auditing."
inputParameters:
- name: place_id
in: body
type: string
description: "The Google Maps Place ID."
call: "google-maps.get-place-details"
with:
place_id: "{{place_id}}"
outputParameters:
- name: rating
type: string
mapping: "$.result.rating"
- name: total_reviews
type: string
mapping: "$.result.user_ratings_total"
consumes:
- type: http
namespace: google-maps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apiKey
key: "$secrets.google_maps_api_key"
resources:
- name: places
path: "/place/details/json"
operations:
- name: get-place-details
method: GET
Retrieves search performance data from Google Search Console for Marriott web properties.
naftiko: "0.5"
info:
label: "Google Search Console SEO Report"
description: "Retrieves search performance data from Google Search Console for Marriott web properties."
tags:
- marketing
- google-search-console
- seo
- reporting
capability:
exposes:
- type: mcp
namespace: seo-analytics
port: 8080
tools:
- name: get-seo-report
description: "Given a site URL and date range, retrieve search performance metrics."
inputParameters:
- name: site_url
in: body
type: string
description: "The site URL."
- name: start_date
in: body
type: string
description: "Start date."
- name: end_date
in: body
type: string
description: "End date."
call: "searchconsole.query-analytics"
with:
site_url: "{{site_url}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: total_clicks
type: string
mapping: "$.rows[0].clicks"
- name: avg_position
type: string
mapping: "$.rows[0].position"
consumes:
- type: http
namespace: searchconsole
baseUri: "https://searchconsole.googleapis.com/webmasters/v3"
authentication:
type: bearer
token: "$secrets.google_searchconsole_token"
resources:
- name: analytics
path: "/sites/{{site_url}}/searchAnalytics/query"
inputParameters:
- name: site_url
in: path
operations:
- name: query-analytics
method: POST
Retrieves property budget vs. actual data from Google Sheets for GM review.
naftiko: "0.5"
info:
label: "Google Sheets Property Budget Tracker"
description: "Retrieves property budget vs. actual data from Google Sheets for GM review."
tags:
- finance
- google-sheets
- reporting
- hospitality
capability:
exposes:
- type: mcp
namespace: property-finance
port: 8080
tools:
- name: get-budget-status
description: "Given a spreadsheet ID, retrieve budget data."
inputParameters:
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID."
- name: sheet_name
in: body
type: string
description: "The sheet tab name."
call: "google-sheets.get-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{sheet_name}}!A1:Z100"
outputParameters:
- name: values
type: string
mapping: "$.values"
consumes:
- type: http
namespace: google-sheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: get-values
method: GET
Retrieves the latest GTM container version for Marriott web properties.
naftiko: "0.5"
info:
label: "Google Tag Manager Container Check"
description: "Retrieves the latest GTM container version for Marriott web properties."
tags:
- marketing
- google-tag-manager
- digital-experience
capability:
exposes:
- type: mcp
namespace: tag-management
port: 8080
tools:
- name: check-container-version
description: "Given a GTM account and container, retrieve latest version."
inputParameters:
- name: account_id
in: body
type: string
description: "GTM account ID."
- name: container_id
in: body
type: string
description: "GTM container ID."
call: "gtm.get-latest-version"
with:
account_id: "{{account_id}}"
container_id: "{{container_id}}"
outputParameters:
- name: version_id
type: string
mapping: "$.containerVersion.containerVersionId"
consumes:
- type: http
namespace: gtm
baseUri: "https://www.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.gtm_token"
resources:
- name: versions
path: "/accounts/{{account_id}}/containers/{{container_id}}/versions"
inputParameters:
- name: account_id
in: path
- name: container_id
in: path
operations:
- name: get-latest-version
method: GET
Retrieves a Marriott Bonvoy member's loyalty profile and tier status from Salesforce Service Cloud given a loyalty number or email address.
naftiko: "0.5"
info:
label: "Guest Loyalty Profile Lookup"
description: "Retrieves a Marriott Bonvoy member's loyalty profile and tier status from Salesforce Service Cloud given a loyalty number or email address."
tags:
- crm
- guest-experience
- salesforce
- loyalty
capability:
exposes:
- type: mcp
namespace: loyalty
port: 8080
tools:
- name: get-bonvoy-profile
description: "Given a Marriott Bonvoy loyalty number or registered email, retrieve the member's tier, lifetime points, stay history summary, and linked contact record from Salesforce. Use at check-in, for guest service recovery, or during service agent interactions."
inputParameters:
- name: loyalty_number
in: body
type: string
description: "The Marriott Bonvoy loyalty membership number."
call: "salesforce.get-bonvoy-contact"
with:
loyalty_id: "{{loyalty_number}}"
outputParameters:
- name: member_name
type: string
mapping: "$.records[0].Name"
- name: tier
type: string
mapping: "$.records[0].Loyalty_Tier__c"
- name: lifetime_points
type: number
mapping: "$.records[0].Lifetime_Points__c"
- name: contact_id
type: string
mapping: "$.records[0].Id"
consumes:
- type: http
namespace: salesforce
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/query"
operations:
- name: get-bonvoy-contact
method: GET
When a guest complaint is received, creates a Salesforce Service Cloud case, tags it with the property and loyalty tier, and notifies the property manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Guest Service Recovery Case Creator"
description: "When a guest complaint is received, creates a Salesforce Service Cloud case, tags it with the property and loyalty tier, and notifies the property manager via Microsoft Teams."
tags:
- crm
- guest-experience
- salesforce
- microsoft-teams
- service-recovery
capability:
exposes:
- type: mcp
namespace: guest-service
port: 8080
tools:
- name: create-service-recovery-case
description: "Given a guest complaint description, loyalty number, and property code, create a Salesforce Service Cloud case and alert the property manager in Teams. Invoke when a guest escalation or complaint is received via any channel."
inputParameters:
- name: loyalty_number
in: body
type: string
description: "The Marriott Bonvoy loyalty number of the complaining guest."
- name: property_code
in: body
type: string
description: "The Marriott property code where the issue occurred."
- name: complaint_description
in: body
type: string
description: "Full description of the guest complaint or service failure."
- name: manager_teams_upn
in: body
type: string
description: "UPN of the property manager to notify in Microsoft Teams."
steps:
- name: create-case
type: call
call: "salesforce-cases.create-case"
with:
subject: "Guest Complaint — Property {{property_code}}"
description: "{{complaint_description}}"
loyalty_number: "{{loyalty_number}}"
- name: notify-manager
type: call
call: "msteams-notify.send-message"
with:
recipient_upn: "{{manager_teams_upn}}"
text: "Guest service case opened: {{create-case.case_number}} — Property {{property_code}}. Please review and respond within SLA."
consumes:
- type: http
namespace: salesforce-cases
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams-notify
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Pulls daily RevPAR and ADR metrics from Salesforce and publishes a consolidated revenue digest to a Microsoft Teams channel for regional leadership.
naftiko: "0.5"
info:
label: "Hotel Revenue Intelligence Digest"
description: "Pulls daily RevPAR and ADR metrics from Salesforce and publishes a consolidated revenue digest to a Microsoft Teams channel for regional leadership."
tags:
- finance
- revenue-management
- reporting
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: revenue-reporting
port: 8080
tools:
- name: digest-daily-revenue
description: "Given a region code and date, fetch RevPAR and ADR metrics from Salesforce analytics and post a digest summary to the regional leadership Teams channel. Use for daily revenue stand-ups and executive reporting."
inputParameters:
- name: region_code
in: body
type: string
description: "Marriott region code (e.g., APAC, EMEA, NAMRC)."
- name: report_date
in: body
type: string
description: "The reporting date in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID where the digest will be posted."
steps:
- name: get-revenue-metrics
type: call
call: "salesforce-revenue.get-revenue-report"
with:
region: "{{region_code}}"
report_date: "{{report_date}}"
- name: post-digest
type: call
call: "msteams-digest.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Revenue Digest for {{region_code}} — {{report_date}} | RevPAR: {{get-revenue-metrics.revpar}} | ADR: {{get-revenue-metrics.adr}} | Occupancy: {{get-revenue-metrics.occupancy_pct}}%"
consumes:
- type: http
namespace: salesforce-revenue
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: revenue-reports
path: "/analytics/reports/{report_id}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-revenue-report
method: GET
- type: http
namespace: msteams-digest
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
When a new lead is captured in HubSpot, enriches with Salesforce account data, creates a follow-up task, and notifies the sales team via Teams.
naftiko: "0.5"
info:
label: "HubSpot Digital Lead Enrichment"
description: "When a new lead is captured in HubSpot, enriches with Salesforce account data, creates a follow-up task, and notifies the sales team via Teams."
tags:
- marketing
- hubspot
- salesforce
- microsoft-teams
- sales
capability:
exposes:
- type: mcp
namespace: lead-management
port: 8080
tools:
- name: enrich-digital-lead
description: "Given a HubSpot contact ID, enrich with Salesforce data and create follow-up."
inputParameters:
- name: contact_id
in: body
type: string
description: "The HubSpot contact ID."
- name: region
in: body
type: string
description: "Sales region."
steps:
- name: get-contact
type: call
call: "hubspot.get-contact"
with:
contact_id: "{{contact_id}}"
- name: create-task
type: call
call: "salesforce.create-task"
with:
subject: "Follow up: {{get-contact.firstname}} {{get-contact.lastname}}"
priority: "High"
- name: notify-sales
type: call
call: "msteams.send-message"
with:
channel_id: "sales-{{region}}"
message: "New digital lead: {{get-contact.firstname}} {{get-contact.lastname}} at {{get-contact.company}}. Task created."
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Takes a Workday requisition and posts to Indeed, then notifies the recruiter in Teams with the live listing URL.
naftiko: "0.5"
info:
label: "Indeed Job Posting Distribution"
description: "Takes a Workday requisition and posts to Indeed, then notifies the recruiter in Teams with the live listing URL."
tags:
- hr
- indeed
- workday
- microsoft-teams
- recruiting
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: distribute-job-posting
description: "Given a Workday requisition ID, create an Indeed posting and notify the recruiter."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
steps:
- name: get-requisition
type: call
call: "workday.get-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: post-job
type: call
call: "indeed.create-posting"
with:
title: "{{get-requisition.title}}"
location: "{{get-requisition.location}}"
company: "Marriott International"
- name: notify-recruiter
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-requisition.recruiter_email}}"
message: "Job posted to Indeed: {{get-requisition.title}}. URL: {{post-job.url}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/marriott/recruiting/requisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: indeed
baseUri: "https://apis.indeed.com/v2"
authentication:
type: bearer
token: "$secrets.indeed_token"
resources:
- name: postings
path: "/postings"
operations:
- name: create-posting
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves data quality scores from Informatica for guest master data, identifying duplicates and data completeness metrics.
naftiko: "0.5"
info:
label: "Informatica Data Quality Report"
description: "Retrieves data quality scores from Informatica for guest master data, identifying duplicates and data completeness metrics."
tags:
- data-management
- informatica
- reporting
- data-quality
capability:
exposes:
- type: mcp
namespace: data-governance
port: 8080
tools:
- name: get-data-quality-scores
description: "Given a data domain, retrieve quality scores from Informatica."
inputParameters:
- name: domain
in: body
type: string
description: "The data domain: guest, property, reservation."
call: "informatica.get-quality-report"
with:
domain: "{{domain}}"
outputParameters:
- name: completeness_score
type: string
mapping: "$.report.completeness"
consumes:
- type: http
namespace: informatica
baseUri: "https://marriott.informaticacloud.com/api/v2"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: quality-reports
path: "/quality/reports"
operations:
- name: get-quality-report
method: GET
Pulls engagement metrics from Instagram for Marriott brand accounts and posts a weekly digest to the marketing Teams channel.
naftiko: "0.5"
info:
label: "Instagram Brand Engagement Digest"
description: "Pulls engagement metrics from Instagram for Marriott brand accounts and posts a weekly digest to the marketing Teams channel."
tags:
- marketing
- instagram
- microsoft-teams
- social-media
capability:
exposes:
- type: mcp
namespace: social-marketing
port: 8080
tools:
- name: generate-instagram-digest
description: "Given an Instagram business account ID, compile weekly metrics."
inputParameters:
- name: account_id
in: body
type: string
description: "The Instagram business account ID."
steps:
- name: get-insights
type: call
call: "instagram.get-account-insights"
with:
account_id: "{{account_id}}"
period: "week"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "social-media-marketing"
message: "Weekly Instagram: Reach: {{get-insights.data[0].values[0].value}}, Impressions: {{get-insights.data[1].values[0].value}}"
consumes:
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: insights
path: "/{{account_id}}/insights"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account-insights
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a critical IT incident is detected by Datadog, creates a ServiceNow incident ticket, assigns it to the on-call team, and posts an alert to the operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "IT Incident Response Handler"
description: "When a critical IT incident is detected by Datadog, creates a ServiceNow incident ticket, assigns it to the on-call team, and posts an alert to the operations Microsoft Teams channel."
tags:
- itsm
- incident-response
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: handle-it-incident
description: "Given a Datadog alert payload including monitor name, severity, and affected host, create a ServiceNow P1 or P2 incident and alert the IT ops Teams channel. Invoke when a critical infrastructure or application alert fires in Datadog."
inputParameters:
- name: monitor_name
in: body
type: string
description: "The name of the Datadog monitor that fired."
- name: severity
in: body
type: string
description: "Alert severity: critical or high."
- name: affected_host
in: body
type: string
description: "Hostname or service name affected by the alert."
- name: alert_url
in: body
type: string
description: "Direct URL to the Datadog alert for investigation."
steps:
- name: create-incident
type: call
call: "servicenow-incidents.create-incident"
with:
short_description: "[{{severity}}] {{monitor_name}} — Host: {{affected_host}}"
urgency: "1"
category: "infrastructure"
- name: post-alert
type: call
call: "msteams-ops.post-channel-message"
with:
channel_id: "it-operations-alerts"
text: "IT Incident {{create-incident.number}}: {{monitor_name}} | Severity: {{severity}} | Host: {{affected_host}} | Alert: {{alert_url}}"
consumes:
- type: http
namespace: servicenow-incidents
baseUri: "https://marriott.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-ops
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
Pulls the current sprint status from Jira for a given project and publishes a daily stand-up digest to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Jira Engineering Sprint Digest"
description: "Pulls the current sprint status from Jira for a given project and publishes a daily stand-up digest to the engineering Teams channel."
tags:
- devops
- jira
- sprint
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-reporting
port: 8080
tools:
- name: digest-sprint-status
description: "Given a Jira project key and active sprint ID, retrieve all in-progress and blocked issues and post a stand-up digest to the engineering Teams channel. Use for daily stand-up preparation and sprint health monitoring."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key (e.g., ENG, DIG, MOB)."
- name: sprint_id
in: body
type: integer
description: "The active Jira sprint ID."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID to post the sprint digest to."
steps:
- name: get-sprint-issues
type: call
call: "jira-sprint.get-sprint-issues"
with:
project: "{{project_key}}"
sprint_id: "{{sprint_id}}"
- name: post-digest
type: call
call: "msteams-sprint.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Sprint Digest — {{project_key}} Sprint {{sprint_id}}: {{get-sprint-issues.in_progress_count}} in progress, {{get-sprint-issues.blocked_count}} blocked, {{get-sprint-issues.done_count}} done."
consumes:
- type: http
namespace: jira-sprint
baseUri: "https://marriott.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-issues
path: "/board/{board_id}/sprint/{sprint_id}/issue"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint-issues
method: GET
- type: http
namespace: msteams-sprint
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
Syncs open positions from Workday to LinkedIn Recruiter and notifies talent acquisition teams via Teams.
naftiko: "0.5"
info:
label: "LinkedIn Talent Pipeline Sync"
description: "Syncs open positions from Workday to LinkedIn Recruiter and notifies talent acquisition teams via Teams."
tags:
- hr
- linkedin
- workday
- microsoft-teams
- recruiting
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: sync-linkedin-pipeline
description: "Given a Workday requisition ID, sync to LinkedIn and notify TA."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday requisition ID."
steps:
- name: get-requisition
type: call
call: "workday.get-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: post-to-linkedin
type: call
call: "linkedin.create-job-posting"
with:
title: "{{get-requisition.title}}"
location: "{{get-requisition.location}}"
- name: notify-ta
type: call
call: "msteams.send-message"
with:
channel_id: "talent-acquisition"
message: "LinkedIn posting synced: {{get-requisition.title}}. URL: {{post-to-linkedin.posting_url}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/marriott/recruiting/requisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/jobPostings"
operations:
- name: create-job-posting
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Launches targeted email campaigns in MailChimp for Bonvoy members, syncing segment data from Salesforce and posting metrics to Teams.
naftiko: "0.5"
info:
label: "MailChimp Bonvoy Campaign Launcher"
description: "Launches targeted email campaigns in MailChimp for Bonvoy members, syncing segment data from Salesforce and posting metrics to Teams."
tags:
- marketing
- mailchimp
- salesforce
- microsoft-teams
- loyalty
capability:
exposes:
- type: mcp
namespace: loyalty-marketing
port: 8080
tools:
- name: launch-bonvoy-campaign
description: "Given a segment ID and template, launch a Bonvoy member campaign."
inputParameters:
- name: segment_id
in: body
type: string
description: "The Salesforce member segment ID."
- name: template_id
in: body
type: string
description: "The MailChimp template ID."
- name: campaign_name
in: body
type: string
description: "Campaign name."
steps:
- name: get-segment
type: call
call: "salesforce.get-campaign-members"
with:
segment_id: "{{segment_id}}"
- name: create-campaign
type: call
call: "mailchimp.create-campaign"
with:
name: "{{campaign_name}}"
template_id: "{{template_id}}"
- name: send-campaign
type: call
call: "mailchimp.send-campaign"
with:
campaign_id: "{{create-campaign.id}}"
- name: notify-marketing
type: call
call: "msteams.send-message"
with:
channel_id: "loyalty-marketing"
message: "Bonvoy campaign '{{campaign_name}}' launched to {{get-segment.totalSize}} members."
consumes:
- type: http
namespace: salesforce
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: campaigns
path: "/query"
operations:
- name: get-campaign-members
method: GET
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: bearer
token: "$secrets.mailchimp_token"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: create-campaign
method: POST
- name: campaign-actions
path: "/campaigns/{{campaign_id}}/actions/send"
inputParameters:
- name: campaign_id
in: path
operations:
- name: send-campaign
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks device compliance in Microsoft Endpoint Manager, creates remediation tickets in ServiceNow.
naftiko: "0.5"
info:
label: "Microsoft Endpoint Device Compliance"
description: "Checks device compliance in Microsoft Endpoint Manager, creates remediation tickets in ServiceNow."
tags:
- security
- microsoft-endpoint-manager
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: endpoint-security
port: 8080
tools:
- name: check-device-compliance
description: "Given a device ID, check compliance and create remediation tickets."
inputParameters:
- name: device_id
in: body
type: string
description: "The Intune device ID."
steps:
- name: get-compliance
type: call
call: "intune.get-device-compliance"
with:
device_id: "{{device_id}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Non-compliant device: {{device_id}}"
category: "endpoint_security"
- name: notify-security
type: call
call: "msteams.send-message"
with:
channel_id: "endpoint-security"
message: "Device violation: {{get-compliance.deviceName}}. Ticket: {{create-ticket.number}}"
consumes:
- type: http
namespace: intune
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: devices
path: "/deviceManagement/managedDevices/{{device_id}}"
inputParameters:
- name: device_id
in: path
operations:
- name: get-device-compliance
method: GET
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves financial consolidation data from Excel Online workbooks via Microsoft Graph for executive reporting.
naftiko: "0.5"
info:
label: "Microsoft Excel Financial Consolidation"
description: "Retrieves financial consolidation data from Excel Online workbooks via Microsoft Graph for executive reporting."
tags:
- finance
- microsoft-excel
- reporting
- financial-reporting
capability:
exposes:
- type: mcp
namespace: financial-reporting
port: 8080
tools:
- name: get-consolidation-data
description: "Given an Excel workbook ID, retrieve financial data."
inputParameters:
- name: workbook_id
in: body
type: string
description: "The Excel workbook drive item ID."
- name: worksheet
in: body
type: string
description: "The worksheet name."
call: "msgraph.get-range"
with:
workbook_id: "{{workbook_id}}"
worksheet: "{{worksheet}}"
outputParameters:
- name: values
type: string
mapping: "$.values"
consumes:
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: workbooks
path: "/me/drive/items/{{workbook_id}}/workbook/worksheets/{{worksheet}}/usedRange"
inputParameters:
- name: workbook_id
in: path
- name: worksheet
in: path
operations:
- name: get-range
method: GET
Books meeting rooms at Marriott corporate offices via Microsoft Graph, checking availability and sending invites.
naftiko: "0.5"
info:
label: "Microsoft Teams Meeting Room Booking"
description: "Books meeting rooms at Marriott corporate offices via Microsoft Graph, checking availability and sending invites."
tags:
- operations
- microsoft-teams
- facilities
- productivity
capability:
exposes:
- type: mcp
namespace: workplace-services
port: 8080
tools:
- name: book-meeting-room
description: "Given a building, date, and time, find and book an available room."
inputParameters:
- name: building
in: body
type: string
description: "Building name."
- name: date
in: body
type: string
description: "Meeting date."
- name: start_time
in: body
type: string
description: "Start time."
steps:
- name: find-rooms
type: call
call: "msgraph.find-meeting-times"
with:
building: "{{building}}"
date: "{{date}}"
start_time: "{{start_time}}"
- name: create-booking
type: call
call: "msgraph.create-event"
with:
room_email: "{{find-rooms.meetingTimeSuggestions[0].locations[0].locationEmailAddress}}"
start: "{{date}}T{{start_time}}:00"
consumes:
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: calendar
path: "/me/findMeetingTimes"
operations:
- name: find-meeting-times
method: POST
- name: events
path: "/me/events"
operations:
- name: create-event
method: POST
When a new associate is added in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message.
naftiko: "0.5"
info:
label: "New Associate Onboarding Orchestrator"
description: "When a new associate is added in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-associate-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Microsoft 365, and Microsoft Teams. Invoke when a new hotel or corporate associate is confirmed in Workday."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new associate."
- name: start_date
in: body
type: string
description: "The associate's start date in YYYY-MM-DD format."
- name: property_code
in: body
type: string
description: "The Marriott property code where the associate will work (e.g., MDCZM)."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: create-onboarding-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New associate onboarding: {{get-worker.full_name}} — Property {{property_code}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: provision-m365
type: call
call: "msgraph.create-user"
with:
display_name: "{{get-worker.full_name}}"
mail_nickname: "{{get-worker.first_name}}.{{get-worker.last_name}}"
department: "{{get-worker.department}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{provision-m365.user_principal_name}}"
text: "Welcome to Marriott, {{get-worker.first_name}}! Your IT onboarding ticket is {{create-onboarding-ticket.number}}. Your start date is {{start_date}}."
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: "/marriott/workers/{worker_id}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://marriott.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: msgraph
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: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Queries New Relic for application performance metrics including error rate, throughput, and response time for Marriott's digital platforms.
naftiko: "0.5"
info:
label: "New Relic APM Health Check"
description: "Queries New Relic for application performance metrics including error rate, throughput, and response time for Marriott's digital platforms."
tags:
- monitoring
- new-relic
- infrastructure
- performance
capability:
exposes:
- type: mcp
namespace: apm-monitoring
port: 8080
tools:
- name: check-app-health
description: "Given a New Relic application ID, retrieve current health metrics."
inputParameters:
- name: app_id
in: body
type: string
description: "The New Relic application ID."
call: "newrelic.get-app-metrics"
with:
app_id: "{{app_id}}"
outputParameters:
- name: error_rate
type: string
mapping: "$.application.application_summary.error_rate"
- name: throughput
type: string
mapping: "$.application.application_summary.throughput"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app-metrics
method: GET
Provisions application access for a new associate in Okta based on their job role and property assignment, then confirms via Teams.
naftiko: "0.5"
info:
label: "Okta User Access Provisioning"
description: "Provisions application access for a new associate in Okta based on their job role and property assignment, then confirms via Teams."
tags:
- identity
- security
- okta
- access-management
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: identity-mgmt
port: 8080
tools:
- name: provision-user-access
description: "Given a new associate's email and job role, assign the appropriate Okta application groups and send a confirmation to their Teams account. Use during onboarding or when an associate changes roles and requires updated application access."
inputParameters:
- name: user_email
in: body
type: string
description: "The work email address of the associate requiring access."
- name: job_role
in: body
type: string
description: "The job role code used to determine which Okta groups to assign (e.g., FRONT_DESK, REVENUE_MGR, IT_ADMIN)."
- name: teams_upn
in: body
type: string
description: "The UPN of the associate's Microsoft Teams account for confirmation notification."
steps:
- name: get-okta-user
type: call
call: "okta-provision.get-user-by-email"
with:
email: "{{user_email}}"
- name: assign-groups
type: call
call: "okta-provision.assign-group"
with:
user_id: "{{get-okta-user.user_id}}"
group_name: "{{job_role}}"
- name: confirm-access
type: call
call: "msteams-identity.send-message"
with:
recipient_upn: "{{teams_upn}}"
text: "Your application access has been provisioned in Okta for role {{job_role}}. You can now log in to your assigned applications at marriott.okta.com."
consumes:
- type: http
namespace: okta-provision
baseUri: "https://marriott.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: get-user-by-email
method: GET
- name: groups
path: "/groups/{group_id}/users/{user_id}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: assign-group
method: PUT
- type: http
namespace: msteams-identity
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Retrieves general ledger account balances from Oracle Cloud ERP for a specified period and cost center.
naftiko: "0.5"
info:
label: "Oracle Cloud ERP GL Balance Lookup"
description: "Retrieves general ledger account balances from Oracle Cloud ERP for a specified period and cost center."
tags:
- finance
- oracle-cloud
- reporting
- accounting
capability:
exposes:
- type: mcp
namespace: finance-gl
port: 8080
tools:
- name: get-gl-balance
description: "Given a GL account and period, retrieve the balance from Oracle Cloud ERP."
inputParameters:
- name: account_code
in: body
type: string
description: "The GL account code."
- name: period
in: body
type: string
description: "The accounting period."
call: "oracle-erp.get-balance"
with:
account_code: "{{account_code}}"
period: "{{period}}"
outputParameters:
- name: net_balance
type: string
mapping: "$.items[0].NetAmount"
consumes:
- type: http
namespace: oracle-erp
baseUri: "https://marriott-erp.oraclecloud.com/fscmRestApi/resources/v2"
authentication:
type: bearer
token: "$secrets.oracle_erp_token"
resources:
- name: gl-balances
path: "/generalLedgerBalances"
operations:
- name: get-balance
method: GET
Queries Oracle Opera PMS for real-time room inventory and availability for a given Marriott property and date range.
naftiko: "0.5"
info:
label: "Oracle Opera Room Availability Check"
description: "Queries Oracle Opera PMS for real-time room inventory and availability for a given Marriott property and date range."
tags:
- revenue-management
- oracle
- hospitality
- reporting
capability:
exposes:
- type: mcp
namespace: revenue-management
port: 8080
tools:
- name: check-room-availability
description: "Given a property code and date range, return room availability by type from Oracle Opera."
inputParameters:
- name: property_code
in: body
type: string
description: "The Marriott property code."
- name: check_in
in: body
type: string
description: "Check-in date in YYYY-MM-DD format."
- name: check_out
in: body
type: string
description: "Check-out date in YYYY-MM-DD format."
call: "oracle-opera.get-availability"
with:
property_code: "{{property_code}}"
start_date: "{{check_in}}"
end_date: "{{check_out}}"
outputParameters:
- name: available_rooms
type: string
mapping: "$.availability.total_available"
- name: occupancy_rate
type: string
mapping: "$.availability.occupancy_pct"
consumes:
- type: http
namespace: oracle-opera
baseUri: "https://marriott-opera.oraclehospitality.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_opera_token"
resources:
- name: availability
path: "/properties/{{property_code}}/availability"
inputParameters:
- name: property_code
in: path
operations:
- name: get-availability
method: GET
Processes firewall rule changes by validating ServiceNow approval, applying the rule in Palo Alto Networks, and logging for compliance.
naftiko: "0.5"
info:
label: "Palo Alto Firewall Rule Change Handler"
description: "Processes firewall rule changes by validating ServiceNow approval, applying the rule in Palo Alto Networks, and logging for compliance."
tags:
- security
- palo-alto-networks
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: network-security
port: 8080
tools:
- name: process-firewall-change
description: "Given a change request number and rule details, validate and apply the firewall rule."
inputParameters:
- name: change_number
in: body
type: string
description: "The ServiceNow change request number."
- name: rule_name
in: body
type: string
description: "Name for the firewall rule."
steps:
- name: verify-change
type: call
call: "servicenow.get-change-request"
with:
number: "{{change_number}}"
- name: apply-rule
type: call
call: "paloalto.create-security-rule"
with:
rule_name: "{{rule_name}}"
- name: log-change
type: call
call: "servicenow.update-change-request"
with:
number: "{{change_number}}"
work_notes: "Rule {{rule_name}} applied. ID: {{apply-rule.rule_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: get-change-request
method: GET
- name: update-change-request
method: PATCH
- type: http
namespace: paloalto
baseUri: "https://marriott-panorama.paloaltonetworks.com/restapi/v10.2"
authentication:
type: apiKey
key: "$secrets.paloalto_api_key"
resources:
- name: security-rules
path: "/Policies/SecurityRules"
operations:
- name: create-security-rule
method: POST
Pulls current headcount by property, department, and employment type from Workday for use in workforce planning and finance reporting.
naftiko: "0.5"
info:
label: "Payroll Headcount Snapshot"
description: "Pulls current headcount by property, department, and employment type from Workday for use in workforce planning and finance reporting."
tags:
- hr
- finance
- reporting
- workday
- headcount
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns a breakdown of Marriott associates by property code, department, and employment type from Workday. Use for workforce planning, budget forecasting, and executive headcount reporting."
inputParameters:
- name: property_code
in: body
type: string
description: "Optional Marriott property code to filter results. Leave blank for global headcount."
call: "workday-hc.headcount-export"
with:
location: "{{property_code}}"
outputParameters:
- name: total_headcount
type: number
mapping: "$.total"
- name: by_department
type: array
mapping: "$.departments"
consumes:
- type: http
namespace: workday-hc
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/marriott/workers/export"
operations:
- name: headcount-export
method: GET
Retrieves team skill assessment scores from Pluralsight, generates development plans in SharePoint, and notifies managers.
naftiko: "0.5"
info:
label: "Pluralsight Skills Assessment Report"
description: "Retrieves team skill assessment scores from Pluralsight, generates development plans in SharePoint, and notifies managers."
tags:
- hr
- pluralsight
- sharepoint
- microsoft-teams
- learning
capability:
exposes:
- type: mcp
namespace: talent-development
port: 8080
tools:
- name: analyze-skills
description: "Given a Pluralsight team ID, analyze skills and create development plans."
inputParameters:
- name: team_id
in: body
type: string
description: "The Pluralsight team ID."
steps:
- name: get-assessments
type: call
call: "pluralsight.get-team-skills"
with:
team_id: "{{team_id}}"
- name: create-plan
type: call
call: "sharepoint.create-item"
with:
site_id: "marriott-learning"
list_name: "DevelopmentPlans"
fields:
team_id: "{{team_id}}"
avg_score: "{{get-assessments.average_score}}"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
channel_id: "engineering-leadership"
message: "Skills analysis for team {{team_id}}: Avg score {{get-assessments.average_score}}/300."
consumes:
- type: http
namespace: pluralsight
baseUri: "https://api.pluralsight.com/api/v1"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: teams
path: "/teams/{{team_id}}/skills"
inputParameters:
- name: team_id
in: path
operations:
- name: get-team-skills
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: list-items
path: "/sites/{{site_id}}/lists/{{list_name}}/items"
inputParameters:
- name: site_id
in: path
- name: list_name
in: path
operations:
- name: create-item
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Triggers a refresh of the Marriott revenue Power BI dataset and notifies stakeholders via Teams when the refresh completes.
naftiko: "0.5"
info:
label: "Power BI Revenue Report Refresh"
description: "Triggers a refresh of the Marriott revenue Power BI dataset and notifies stakeholders via Teams when the refresh completes."
tags:
- data
- analytics
- power-bi
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: refresh-revenue-report
description: "Given a Power BI dataset ID and workspace ID, trigger a dataset refresh and notify the revenue management Teams channel when complete. Use at end of business day or before executive revenue review meetings."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the revenue report to refresh."
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID containing the dataset."
- name: notify_channel_id
in: body
type: string
description: "Microsoft Teams channel ID to notify when refresh completes."
steps:
- name: trigger-refresh
type: call
call: "powerbi.trigger-refresh"
with:
dataset_id: "{{dataset_id}}"
workspace_id: "{{workspace_id}}"
- name: notify-complete
type: call
call: "msteams-bi.post-channel-message"
with:
channel_id: "{{notify_channel_id}}"
text: "Power BI revenue report refresh triggered for dataset {{dataset_id}}. Data will be available shortly."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{workspace_id}/datasets/{dataset_id}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams-bi
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
Publishes a property-level promotional campaign in Adobe Experience Manager and triggers a social post to the property's LinkedIn and Meta pages.
naftiko: "0.5"
info:
label: "Property Marketing Campaign Launch"
description: "Publishes a property-level promotional campaign in Adobe Experience Manager and triggers a social post to the property's LinkedIn and Meta pages."
tags:
- marketing
- adobe
- linkedin
- meta
- social-media
- campaign
capability:
exposes:
- type: mcp
namespace: marketing-campaigns
port: 8080
tools:
- name: launch-property-campaign
description: "Given a campaign title, body copy, property code, and target channels, publish the campaign content in Adobe Experience Manager and distribute to LinkedIn and Meta. Use when launching seasonal promotions, F&B events, or property-specific offers."
inputParameters:
- name: campaign_title
in: body
type: string
description: "The headline/title of the promotional campaign."
- name: campaign_body
in: body
type: string
description: "The full campaign body copy or description."
- name: property_code
in: body
type: string
description: "The Marriott property code for targeting and attribution."
- name: linkedin_org_id
in: body
type: string
description: "LinkedIn organization URN ID for the property page."
- name: meta_page_id
in: body
type: string
description: "Meta/Facebook page ID for the property page."
steps:
- name: publish-aem-content
type: call
call: "adobe-aem.create-content-fragment"
with:
title: "{{campaign_title}}"
body: "{{campaign_body}}"
property_code: "{{property_code}}"
- name: post-linkedin
type: call
call: "linkedin.create-post"
with:
author: "urn:li:organization:{{linkedin_org_id}}"
text: "{{campaign_title}} — {{campaign_body}}"
- name: post-meta
type: call
call: "meta.create-post"
with:
page_id: "{{meta_page_id}}"
message: "{{campaign_title}} — {{campaign_body}}"
consumes:
- type: http
namespace: adobe-aem
baseUri: "https://author.marriott.com/api/assets"
authentication:
type: bearer
token: "$secrets.aem_token"
resources:
- name: content-fragments
path: "/content/dam/marriott/campaigns"
operations:
- name: create-content-fragment
method: POST
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: posts
path: "/ugcPosts"
operations:
- name: create-post
method: POST
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_page_token"
resources:
- name: feed-posts
path: "/{page_id}/feed"
inputParameters:
- name: page_id
in: path
operations:
- name: create-post
method: POST
Triggers a Qlik Sense app reload for operations dashboards and posts refresh status to Teams.
naftiko: "0.5"
info:
label: "Qlik Sense Operations Dashboard"
description: "Triggers a Qlik Sense app reload for operations dashboards and posts refresh status to Teams."
tags:
- reporting
- qlik-sense
- microsoft-teams
- operations
capability:
exposes:
- type: mcp
namespace: operations-reporting
port: 8080
tools:
- name: refresh-ops-dashboard
description: "Given a Qlik Sense app ID, trigger reload and notify."
inputParameters:
- name: app_id
in: body
type: string
description: "The Qlik Sense app ID."
steps:
- name: trigger-reload
type: call
call: "qliksense.reload-app"
with:
app_id: "{{app_id}}"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "property-operations"
message: "Ops dashboard refreshed. App: {{app_id}}, Status: {{trigger-reload.status}}"
consumes:
- type: http
namespace: qliksense
baseUri: "https://marriott.us.qlikcloud.com/api/v1"
authentication:
type: bearer
token: "$secrets.qliksense_token"
resources:
- name: reloads
path: "/reloads"
operations:
- name: reload-app
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls property-level revenue forecasts from SAP S/4HANA, consolidates them in Snowflake, and publishes a summary report to Power BI for finance leadership review.
naftiko: "0.5"
info:
label: "Quarterly Financial Forecast Consolidation"
description: "Pulls property-level revenue forecasts from SAP S/4HANA, consolidates them in Snowflake, and publishes a summary report to Power BI for finance leadership review."
tags:
- finance
- forecasting
- sap
- snowflake
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: finance-forecasting
port: 8080
tools:
- name: consolidate-quarterly-forecast
description: "Given a fiscal quarter and year, extract property revenue forecasts from SAP S/4HANA, load them into the Snowflake finance warehouse, and trigger a Power BI dataset refresh to surface the consolidated forecast. Use for quarterly planning cycles and CFO reporting."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "The fiscal quarter to consolidate (e.g., Q3-2026)."
- name: snowflake_schema
in: body
type: string
description: "The Snowflake target schema for the consolidated forecast data."
- name: powerbi_dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh after the data load."
steps:
- name: get-sap-forecast
type: call
call: "sap-forecast.get-forecast-data"
with:
fiscal_period: "{{fiscal_quarter}}"
- name: refresh-powerbi
type: call
call: "powerbi-forecast.trigger-refresh"
with:
dataset_id: "{{powerbi_dataset_id}}"
consumes:
- type: http
namespace: sap-forecast
baseUri: "https://marriott-s4.sap.com/sap/opu/odata/sap/FAR_ACDOCA_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: forecast-data
path: "/AcdocaItems"
operations:
- name: get-forecast-data
method: GET
- type: http
namespace: powerbi-forecast
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{workspace_id}/datasets/{dataset_id}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Retrieves corporate account health metrics from Salesforce for enterprise sales review.
naftiko: "0.5"
info:
label: "Salesforce Corporate Account Health"
description: "Retrieves corporate account health metrics from Salesforce for enterprise sales review."
tags:
- sales
- salesforce
- reporting
- account-management
capability:
exposes:
- type: mcp
namespace: enterprise-sales
port: 8080
tools:
- name: get-account-health
description: "Given a Salesforce account ID, retrieve account health metrics."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
call: "salesforce.get-account-health"
with:
account_id: "{{account_id}}"
outputParameters:
- name: contract_value
type: string
mapping: "$.records[0].Contract_Value__c"
- name: satisfaction_score
type: string
mapping: "$.records[0].CSAT_Score__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: get-account-health
method: GET
When a new group sales lead arrives in Salesforce, enriches it with company data and routes it to the appropriate regional sales team with a Teams notification.
naftiko: "0.5"
info:
label: "Salesforce Lead Enrichment and Routing"
description: "When a new group sales lead arrives in Salesforce, enriches it with company data and routes it to the appropriate regional sales team with a Teams notification."
tags:
- crm
- sales
- salesforce
- microsoft-teams
- lead-management
capability:
exposes:
- type: mcp
namespace: sales-ops
port: 8080
tools:
- name: enrich-and-route-lead
description: "Given a Salesforce lead ID, retrieve the lead details, update the record with enriched company data, assign to the correct regional sales owner, and notify them via Teams. Use when a new group sales or corporate account lead is created in Salesforce."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead ID to enrich and route."
steps:
- name: get-lead
type: call
call: "salesforce-leads.get-lead"
with:
lead_id: "{{lead_id}}"
- name: update-lead-owner
type: call
call: "salesforce-leads.update-lead"
with:
lead_id: "{{lead_id}}"
status: "Working"
- name: notify-owner
type: call
call: "msteams-sales.send-message"
with:
recipient_upn: "{{get-lead.owner_email}}"
text: "New group sales lead assigned: {{get-lead.company}} — {{get-lead.first_name}} {{get-lead.last_name}} | Est. room nights: {{get-lead.estimated_room_nights}} | Salesforce: {{lead_id}}"
consumes:
- type: http
namespace: salesforce-leads
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{lead_id}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- name: update-lead
method: PATCH
- type: http
namespace: msteams-sales
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Queries SAP Ariba for supplier contracts expiring within 90 days and notifies the procurement team via Microsoft Teams with a prioritized renewal list.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Expiry Alert"
description: "Queries SAP Ariba for supplier contracts expiring within 90 days and notifies the procurement team via Microsoft Teams with a prioritized renewal list."
tags:
- procurement
- sap-ariba
- contract-management
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: contract-mgmt
port: 8080
tools:
- name: alert-expiring-contracts
description: "Query SAP Ariba for all supplier contracts expiring within a specified number of days and post an expiry alert to the procurement Teams channel. Use for monthly contract renewal planning and supplier relationship management."
inputParameters:
- name: days_until_expiry
in: body
type: integer
description: "Number of days ahead to look for expiring contracts (e.g., 90)."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the procurement team alert."
steps:
- name: get-expiring-contracts
type: call
call: "ariba-contracts.get-contracts"
with:
expiry_days: "{{days_until_expiry}}"
- name: post-alert
type: call
call: "msteams-contracts.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Contract Expiry Alert: {{get-expiring-contracts.count}} supplier contracts expire within {{days_until_expiry}} days. Please review in SAP Ariba and initiate renewals."
consumes:
- type: http
namespace: ariba-contracts
baseUri: "https://openapi.ariba.com/api/contract-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: contracts
path: "/contracts"
operations:
- name: get-contracts
method: GET
- type: http
namespace: msteams-contracts
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
Submits a new procurement requisition in SAP Ariba and routes it for approval, then notifies the requester via Microsoft Teams when a decision is made.
naftiko: "0.5"
info:
label: "SAP Ariba Procurement Requisition Approval"
description: "Submits a new procurement requisition in SAP Ariba and routes it for approval, then notifies the requester via Microsoft Teams when a decision is made."
tags:
- procurement
- sap-ariba
- approval
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ariba-procurement
port: 8080
tools:
- name: submit-requisition
description: "Given a procurement item description, cost center, and amount, create a requisition in SAP Ariba and notify the requester of the submission. Use for hotel supply purchases, FF&E orders, and operating expense requisitions."
inputParameters:
- name: item_description
in: body
type: string
description: "Description of the goods or services being requested."
- name: cost_center
in: body
type: string
description: "The SAP cost center to charge the purchase against."
- name: amount
in: body
type: number
description: "Estimated amount in USD."
- name: requester_upn
in: body
type: string
description: "UPN of the associate submitting the request."
steps:
- name: create-requisition
type: call
call: "ariba.create-requisition"
with:
description: "{{item_description}}"
cost_center: "{{cost_center}}"
estimated_amount: "{{amount}}"
requester: "{{requester_upn}}"
- name: notify-requester
type: call
call: "msteams-ariba.send-message"
with:
recipient_upn: "{{requester_upn}}"
text: "Your procurement requisition {{create-requisition.requisition_id}} for {{item_description}} (${{amount}}) has been submitted to SAP Ariba and is pending approval."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/purchase-requisitions/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions"
operations:
- name: create-requisition
method: POST
- type: http
namespace: msteams-ariba
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Orchestrates new vendor onboarding by creating the vendor in SAP Ariba, generating a ServiceNow ticket for compliance review, provisioning a SharePoint document folder, and notifying procurement via Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Vendor Onboarding Orchestrator"
description: "Orchestrates new vendor onboarding by creating the vendor in SAP Ariba, generating a ServiceNow ticket for compliance review, provisioning a SharePoint document folder, and notifying procurement via Teams."
tags:
- procurement
- sap-ariba
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vendor-management
port: 8080
tools:
- name: onboard-vendor
description: "Given vendor details, create records across SAP Ariba, ServiceNow, SharePoint, and notify procurement."
inputParameters:
- name: vendor_name
in: body
type: string
description: "The vendor company name."
- name: vendor_category
in: body
type: string
description: "Vendor category: food-beverage, maintenance, technology, amenities."
steps:
- name: create-vendor
type: call
call: "ariba.create-supplier"
with:
name: "{{vendor_name}}"
category: "{{vendor_category}}"
- name: create-compliance-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Vendor compliance review: {{vendor_name}}"
category: "procurement_compliance"
assigned_to: "Vendor_Compliance"
- name: create-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "marriott-procurement"
folder_path: "Vendors/{{vendor_name}}"
- name: notify-procurement
type: call
call: "msteams.send-message"
with:
channel_id: "procurement-team"
message: "New vendor onboarding: {{vendor_name}} ({{vendor_category}}). Ariba ID: {{create-vendor.id}}. Compliance ticket: {{create-compliance-ticket.number}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/sites/{{site_id}}/drive/root/children"
inputParameters:
- name: site_id
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves monthly expense summary from SAP Concur for a cost center, returning total spend and policy violations.
naftiko: "0.5"
info:
label: "SAP Concur Expense Policy Audit"
description: "Retrieves monthly expense summary from SAP Concur for a cost center, returning total spend and policy violations."
tags:
- finance
- sap-concur
- reporting
- expense-management
capability:
exposes:
- type: mcp
namespace: finance-expenses
port: 8080
tools:
- name: get-expense-audit
description: "Given a cost center and month, retrieve expense audit data."
inputParameters:
- name: cost_center
in: body
type: string
description: "The cost center code."
- name: month
in: body
type: string
description: "Month in YYYY-MM format."
call: "concur.get-expense-summary"
with:
cost_center: "{{cost_center}}"
month: "{{month}}"
outputParameters:
- name: total_spend
type: string
mapping: "$.summary.total_amount"
- name: violation_count
type: string
mapping: "$.summary.policy_violations"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
operations:
- name: get-expense-summary
method: GET
Queries SAP HANA for real-time revenue data across Marriott properties, returning ADR, occupancy, and RevPAR metrics.
naftiko: "0.5"
info:
label: "SAP HANA Revenue Analytics Query"
description: "Queries SAP HANA for real-time revenue data across Marriott properties, returning ADR, occupancy, and RevPAR metrics."
tags:
- finance
- sap-hana
- revenue-management
- reporting
capability:
exposes:
- type: mcp
namespace: revenue-analytics
port: 8080
tools:
- name: query-revenue-metrics
description: "Given a region and period, retrieve revenue metrics from SAP HANA."
inputParameters:
- name: region
in: body
type: string
description: "Operating region."
- name: period
in: body
type: string
description: "Reporting period in YYYY-MM format."
call: "saphana.run-query"
with:
region: "{{region}}"
period: "{{period}}"
outputParameters:
- name: adr
type: string
mapping: "$.results[0].avg_daily_rate"
- name: revpar
type: string
mapping: "$.results[0].revpar"
consumes:
- type: http
namespace: saphana
baseUri: "https://marriott-hana.cfapps.sap.hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.saphana_token"
resources:
- name: queries
path: "/query"
operations:
- name: run-query
method: POST
Looks up a Marriott SAP purchase order by number and returns header status, vendor details, and total value for procurement review.
naftiko: "0.5"
info:
label: "SAP Purchase Order Lookup"
description: "Looks up a Marriott SAP purchase order by number and returns header status, vendor details, and total value for procurement review."
tags:
- procurement
- erp
- sap
- finance
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, return the PO header status, vendor name, total value, and currency. Use for procurement approvals, vendor payment tracking, and accounts payable reconciliation."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number (e.g., 4500123456)."
call: "sap-erp.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: string
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://marriott-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
Submits an IT change request in ServiceNow, assigns it to the CAB review group, and notifies approvers via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Management Approval"
description: "Submits an IT change request in ServiceNow, assigns it to the CAB review group, and notifies approvers via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: submit-change-request
description: "Given a change title, description, risk level, and implementation window, create a ServiceNow change request and notify the Change Advisory Board channel in Teams. Use when planning infrastructure changes, software deployments, or configuration modifications."
inputParameters:
- name: change_title
in: body
type: string
description: "Short title describing the change being requested."
- name: change_description
in: body
type: string
description: "Detailed description of the change, rationale, and rollback plan."
- name: risk_level
in: body
type: string
description: "Risk level of the change: low, medium, or high."
- name: implementation_window
in: body
type: string
description: "Planned implementation date and time window in ISO 8601 format."
steps:
- name: create-change
type: call
call: "servicenow-cr.create-change"
with:
short_description: "{{change_title}}"
description: "{{change_description}}"
risk: "{{risk_level}}"
start_date: "{{implementation_window}}"
- name: notify-cab
type: call
call: "msteams-cab.post-channel-message"
with:
channel_id: "change-advisory-board"
text: "New change request submitted: {{create-change.number}} — {{change_title}} | Risk: {{risk_level}} | Window: {{implementation_window}} | Please review in ServiceNow."
consumes:
- type: http
namespace: servicenow-cr
baseUri: "https://marriott.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-cab
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
Queries ServiceNow CMDB for IT asset details by asset tag, returning device type, assigned user, and location.
naftiko: "0.5"
info:
label: "ServiceNow IT Asset Lookup"
description: "Queries ServiceNow CMDB for IT asset details by asset tag, returning device type, assigned user, and location."
tags:
- it-operations
- servicenow
- asset-management
capability:
exposes:
- type: mcp
namespace: it-assets
port: 8080
tools:
- name: lookup-asset
description: "Given an asset tag, retrieve device details from ServiceNow CMDB."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The IT asset tag."
call: "servicenow.get-asset"
with:
asset_tag: "{{asset_tag}}"
outputParameters:
- name: device_type
type: string
mapping: "$.result.sys_class_name"
- name: assigned_to
type: string
mapping: "$.result.assigned_to.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/alm_hardware"
operations:
- name: get-asset
method: GET
Creates KB articles in ServiceNow from resolved incidents and notifies the IT support team via Teams.
naftiko: "0.5"
info:
label: "ServiceNow Knowledge Article Publisher"
description: "Creates KB articles in ServiceNow from resolved incidents and notifies the IT support team via Teams."
tags:
- it-operations
- servicenow
- microsoft-teams
- knowledge-management
capability:
exposes:
- type: mcp
namespace: knowledge-ops
port: 8080
tools:
- name: publish-kb-article
description: "Given incident details, create a KB article and notify support."
inputParameters:
- name: title
in: body
type: string
description: "Article title."
- name: resolution
in: body
type: string
description: "Resolution steps."
steps:
- name: create-article
type: call
call: "servicenow.create-kb-article"
with:
title: "{{title}}"
text: "{{resolution}}"
- name: notify-support
type: call
call: "msteams.send-message"
with:
channel_id: "it-service-desk"
message: "New KB article: {{title}}. Article: {{create-article.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: kb-articles
path: "/table/kb_knowledge"
operations:
- name: create-kb-article
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates problem management trend reports from ServiceNow identifying recurring issues and resolution times.
naftiko: "0.5"
info:
label: "ServiceNow Problem Trend Report"
description: "Generates problem management trend reports from ServiceNow identifying recurring issues and resolution times."
tags:
- it-operations
- servicenow
- reporting
- problem-management
capability:
exposes:
- type: mcp
namespace: it-service-management
port: 8080
tools:
- name: get-problem-trends
description: "Given a date range, retrieve problem trend data."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date."
- name: end_date
in: body
type: string
description: "End date."
call: "servicenow.get-problem-stats"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: total_problems
type: string
mapping: "$.result.stats.total"
- name: avg_resolution_days
type: string
mapping: "$.result.stats.avg_resolution"
consumes:
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: stats
path: "/stats/problem"
operations:
- name: get-problem-stats
method: GET
Updates property operations manuals in SharePoint, notifies properties via Teams, and creates Confluence KB entries.
naftiko: "0.5"
info:
label: "SharePoint Operations Manual Distribution"
description: "Updates property operations manuals in SharePoint, notifies properties via Teams, and creates Confluence KB entries."
tags:
- operations
- sharepoint
- microsoft-teams
- confluence
capability:
exposes:
- type: mcp
namespace: property-operations
port: 8080
tools:
- name: distribute-manual-update
description: "Given a document ID, distribute updates and notify teams."
inputParameters:
- name: document_id
in: body
type: string
description: "The SharePoint document ID."
- name: brand
in: body
type: string
description: "Target brand."
steps:
- name: get-document
type: call
call: "sharepoint.get-document"
with:
site_id: "marriott-policies"
document_id: "{{document_id}}"
- name: create-kb
type: call
call: "confluence.create-page"
with:
space_key: "OPS"
title: "Policy Update: {{get-document.name}}"
- name: notify-properties
type: call
call: "msteams.send-message"
with:
channel_id: "brand-{{brand}}-operations"
message: "Manual updated: {{get-document.name}}. KB: {{create-kb._links.webui}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/{{site_id}}/drive/items/{{document_id}}"
inputParameters:
- name: site_id
in: path
- name: document_id
in: path
operations:
- name: get-document
method: GET
- type: http
namespace: confluence
baseUri: "https://marriott.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the status of scheduled Snowflake data pipeline tasks and alerts via Microsoft Teams if any tasks have failed or are overdue.
naftiko: "0.5"
info:
label: "Snowflake Data Pipeline Health Monitor"
description: "Checks the status of scheduled Snowflake data pipeline tasks and alerts via Microsoft Teams if any tasks have failed or are overdue."
tags:
- data
- analytics
- snowflake
- monitoring
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: check-pipeline-health
description: "Queries Snowflake for the execution history of a named task schema and returns failed or overdue tasks. Posts a Teams alert if failures are detected. Use for daily data pipeline monitoring and on-call triage."
inputParameters:
- name: schema_name
in: body
type: string
description: "The Snowflake schema containing the pipeline tasks to check."
- name: alert_channel_id
in: body
type: string
description: "Microsoft Teams channel ID to post alerts to if failures are found."
steps:
- name: get-task-history
type: call
call: "snowflake.get-task-history"
with:
schema: "{{schema_name}}"
- name: post-alert
type: call
call: "msteams-data.post-channel-message"
with:
channel_id: "{{alert_channel_id}}"
text: "Data pipeline health check for schema {{schema_name}}: {{get-task-history.failed_count}} failed tasks detected. Please investigate."
consumes:
- type: http
namespace: snowflake
baseUri: "https://marriott.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/{database}/schemas/{schema}/tasks"
inputParameters:
- name: database
in: path
- name: schema
in: path
operations:
- name: get-task-history
method: GET
- type: http
namespace: msteams-data
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
Pulls engagement metrics from LinkedIn and Meta for all Marriott brand pages and publishes a weekly digest to the marketing Teams channel.
naftiko: "0.5"
info:
label: "Social Media Performance Digest"
description: "Pulls engagement metrics from LinkedIn and Meta for all Marriott brand pages and publishes a weekly digest to the marketing Teams channel."
tags:
- marketing
- social-media
- linkedin
- meta
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: social-reporting
port: 8080
tools:
- name: digest-social-performance
description: "Given a LinkedIn organization ID and Meta page ID, retrieve weekly engagement metrics from both platforms and post a consolidated digest to the marketing Teams channel. Use for weekly brand performance reviews and campaign post-mortems."
inputParameters:
- name: linkedin_org_id
in: body
type: string
description: "LinkedIn organization URN ID for the Marriott brand page."
- name: meta_page_id
in: body
type: string
description: "Meta page ID for the Marriott Facebook brand page."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID to post the social digest to."
steps:
- name: get-linkedin-stats
type: call
call: "linkedin-analytics.get-organization-stats"
with:
organization_id: "{{linkedin_org_id}}"
- name: get-meta-stats
type: call
call: "meta-analytics.get-page-insights"
with:
page_id: "{{meta_page_id}}"
- name: post-digest
type: call
call: "msteams-social.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Weekly Social Performance: LinkedIn impressions: {{get-linkedin-stats.impressions}} | LinkedIn engagements: {{get-linkedin-stats.engagements}} | Meta reach: {{get-meta-stats.reach}} | Meta reactions: {{get-meta-stats.reactions}}"
consumes:
- type: http
namespace: linkedin-analytics
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: organization-stats
path: "/organizationalEntityShareStatistics"
operations:
- name: get-organization-stats
method: GET
- type: http
namespace: meta-analytics
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_page_token"
resources:
- name: page-insights
path: "/{page_id}/insights"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page-insights
method: GET
- type: http
namespace: msteams-social
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
Retrieves network device status from SolarWinds for hotel property infrastructure including uptime, CPU, and memory.
naftiko: "0.5"
info:
label: "SolarWinds Network Monitor"
description: "Retrieves network device status from SolarWinds for hotel property infrastructure including uptime, CPU, and memory."
tags:
- infrastructure
- solarwinds
- monitoring
- networking
capability:
exposes:
- type: mcp
namespace: network-ops
port: 8080
tools:
- name: check-network-device
description: "Given a SolarWinds node ID, retrieve device health."
inputParameters:
- name: node_id
in: body
type: string
description: "The SolarWinds node ID."
call: "solarwinds.get-node"
with:
node_id: "{{node_id}}"
outputParameters:
- name: status
type: string
mapping: "$.node.StatusDescription"
- name: cpu_load
type: string
mapping: "$.node.CPULoad"
consumes:
- type: http
namespace: solarwinds
baseUri: "https://marriott-solarwinds.com/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_password"
resources:
- name: nodes
path: "/Query"
operations:
- name: get-node
method: POST
Triggers a Tableau workbook refresh for franchise performance dashboards and notifies franchise operations leadership via Teams.
naftiko: "0.5"
info:
label: "Tableau Franchise Performance Dashboard"
description: "Triggers a Tableau workbook refresh for franchise performance dashboards and notifies franchise operations leadership via Teams."
tags:
- reporting
- tableau
- microsoft-teams
- franchise
capability:
exposes:
- type: mcp
namespace: franchise-reporting
port: 8080
tools:
- name: refresh-franchise-dashboard
description: "Given a Tableau workbook ID, trigger refresh and notify leadership."
inputParameters:
- name: workbook_id
in: body
type: string
description: "The Tableau workbook ID."
steps:
- name: trigger-refresh
type: call
call: "tableau.refresh-workbook"
with:
workbook_id: "{{workbook_id}}"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "franchise-operations"
message: "Franchise performance dashboard refreshed. Workbook: {{workbook_id}}. Job: {{trigger-refresh.job.id}}"
consumes:
- type: http
namespace: tableau
baseUri: "https://marriott-tableau.online.tableau.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/marriott/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Teradata data warehouse for guest segment analytics including average stay length and repeat frequency.
naftiko: "0.5"
info:
label: "Teradata Guest Segment Analytics"
description: "Queries Teradata data warehouse for guest segment analytics including average stay length and repeat frequency."
tags:
- analytics
- teradata
- reporting
- guest-experience
capability:
exposes:
- type: mcp
namespace: guest-analytics
port: 8080
tools:
- name: query-guest-segments
description: "Given a segment and quarter, retrieve analytics from Teradata."
inputParameters:
- name: segment
in: body
type: string
description: "Guest segment."
- name: quarter
in: body
type: string
description: "Fiscal quarter."
call: "teradata.run-query"
with:
segment: "{{segment}}"
quarter: "{{quarter}}"
outputParameters:
- name: avg_length_of_stay
type: string
mapping: "$.results[0].avg_los"
consumes:
- type: http
namespace: teradata
baseUri: "https://marriott-teradata.analytics.teradata.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries"
operations:
- name: run-query
method: POST
Triggers a Terraform Cloud workspace run to provision new hotel property infrastructure, notifies the infrastructure team via Teams, and logs a ServiceNow change record.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Provisioning"
description: "Triggers a Terraform Cloud workspace run to provision new hotel property infrastructure, notifies the infrastructure team via Teams, and logs a ServiceNow change record."
tags:
- cloud
- infrastructure
- terraform
- servicenow
- microsoft-teams
- provisioning
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: provision-property-infrastructure
description: "Given a Terraform Cloud workspace ID and property code, trigger a Terraform run to provision the required cloud infrastructure for a new or renovated hotel property, create a ServiceNow change record, and notify the infrastructure team. Use when onboarding a new property or expanding cloud footprint."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID containing the infrastructure configuration."
- name: property_code
in: body
type: string
description: "The Marriott property code being provisioned."
- name: environment
in: body
type: string
description: "Target environment: dev, staging, or production."
steps:
- name: trigger-tf-run
type: call
call: "terraform.create-run"
with:
workspace_id: "{{workspace_id}}"
message: "Provisioning infrastructure for property {{property_code}} in {{environment}}"
- name: create-snow-change
type: call
call: "servicenow-infra.create-change"
with:
short_description: "Infrastructure provisioning: Property {{property_code}} — {{environment}}"
category: "cloud_provisioning"
- name: notify-infra-team
type: call
call: "msteams-infra.post-channel-message"
with:
channel_id: "infrastructure-deployments"
text: "Terraform run triggered for property {{property_code}} ({{environment}}). Change request: {{create-snow-change.number}}. Run ID: {{trigger-tf-run.run_id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: servicenow-infra
baseUri: "https://marriott.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-infra
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
Monitors Twitter for Marriott brand mentions, escalates negative sentiment tweets via Salesforce cases and Teams alerts.
naftiko: "0.5"
info:
label: "Twitter Brand Mention Monitor"
description: "Monitors Twitter for Marriott brand mentions, escalates negative sentiment tweets via Salesforce cases and Teams alerts."
tags:
- marketing
- twitter
- salesforce
- microsoft-teams
- social-media
capability:
exposes:
- type: mcp
namespace: social-listening
port: 8080
tools:
- name: process-brand-mention
description: "Given a search query, find brand mentions and escalate negative ones."
inputParameters:
- name: query
in: body
type: string
description: "Twitter search query."
steps:
- name: search-tweets
type: call
call: "twitter.search-recent"
with:
query: "{{query}}"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Twitter brand mention escalation"
origin: "Twitter"
- name: alert-team
type: call
call: "msteams.send-message"
with:
channel_id: "social-media-team"
message: "Brand alert: {{search-tweets.result_count}} mentions. Case: {{create-case.CaseNumber}}"
consumes:
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets/search/recent"
operations:
- name: search-recent
method: GET
- type: http
namespace: salesforce
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Looks up an open vendor invoice in SAP S/4HANA, validates it against the purchase order, and triggers payment approval workflow.
naftiko: "0.5"
info:
label: "Vendor Invoice Processing"
description: "Looks up an open vendor invoice in SAP S/4HANA, validates it against the purchase order, and triggers payment approval workflow."
tags:
- finance
- erp
- sap
- accounts-payable
- invoice
capability:
exposes:
- type: mcp
namespace: accounts-payable
port: 8080
tools:
- name: process-vendor-invoice
description: "Given a vendor invoice number and PO number, retrieve the invoice from SAP, validate the amount matches the PO, and trigger the payment approval workflow. Use for accounts payable processing and three-way invoice matching."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The vendor invoice number to process."
- name: po_number
in: body
type: string
description: "The associated SAP purchase order number for three-way match validation."
steps:
- name: get-invoice
type: call
call: "sap-fi.get-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: get-po-for-match
type: call
call: "sap-mm.get-po"
with:
po_number: "{{po_number}}"
- name: trigger-approval
type: call
call: "sap-fi.approve-invoice"
with:
invoice_id: "{{get-invoice.invoice_id}}"
po_total: "{{get-po-for-match.total_value}}"
consumes:
- type: http
namespace: sap-fi
baseUri: "https://marriott-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_number}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- name: approve-invoice
method: POST
- type: http
namespace: sap-mm
baseUri: "https://marriott-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
Initiates data restores from Veritas NetBackup, creates ServiceNow change requests, and notifies requestors via Teams.
naftiko: "0.5"
info:
label: "Veritas NetBackup Restore Handler"
description: "Initiates data restores from Veritas NetBackup, creates ServiceNow change requests, and notifies requestors via Teams."
tags:
- infrastructure
- veritas-netbackup
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: backup-recovery
port: 8080
tools:
- name: initiate-restore
description: "Given a backup image ID, initiate restore and track via ServiceNow."
inputParameters:
- name: backup_id
in: body
type: string
description: "The NetBackup image ID."
- name: target_path
in: body
type: string
description: "Restore target path."
steps:
- name: create-change
type: call
call: "servicenow.create-change-request"
with:
short_description: "Data restore: {{backup_id}}"
category: "infrastructure"
- name: start-restore
type: call
call: "netbackup.restore-image"
with:
backup_id: "{{backup_id}}"
target_path: "{{target_path}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "infrastructure-ops"
message: "Restore initiated: {{backup_id}}. Change: {{create-change.number}}. Job: {{start-restore.job_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: netbackup
baseUri: "https://marriott-netbackup.com/netbackup/admin/api/v4"
authentication:
type: bearer
token: "$secrets.netbackup_token"
resources:
- name: restores
path: "/recovery/workloads/vmware/recoverypoints/{{backup_id}}/recover"
inputParameters:
- name: backup_id
in: path
operations:
- name: restore-image
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Sends pre-arrival WhatsApp messages to Marriott guests using templates, pulling guest data from Salesforce and logging in ServiceNow.
naftiko: "0.5"
info:
label: "WhatsApp Guest Pre-Arrival Messenger"
description: "Sends pre-arrival WhatsApp messages to Marriott guests using templates, pulling guest data from Salesforce and logging in ServiceNow."
tags:
- guest-experience
- whatsapp
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: guest-communications
port: 8080
tools:
- name: send-pre-arrival-message
description: "Given a reservation ID, send a pre-arrival WhatsApp message."
inputParameters:
- name: reservation_id
in: body
type: string
description: "The reservation confirmation number."
steps:
- name: get-reservation
type: call
call: "salesforce.get-reservation"
with:
reservation_id: "{{reservation_id}}"
- name: send-message
type: call
call: "whatsapp.send-template"
with:
phone_number: "{{get-reservation.Guest_Phone__c}}"
template_name: "marriott_pre_arrival"
- name: log-communication
type: call
call: "servicenow.create-record"
with:
table: "u_guest_communications"
fields:
reservation: "{{reservation_id}}"
channel: "whatsapp"
consumes:
- type: http
namespace: salesforce
baseUri: "https://marriott.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: get-reservation
method: GET
- type: http
namespace: whatsapp
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.whatsapp_token"
resources:
- name: messages
path: "/{{phone_number_id}}/messages"
operations:
- name: send-template
method: POST
- type: http
namespace: servicenow
baseUri: "https://marriott.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
During open enrollment, pulls pending status from Workday, sends reminders via Outlook, and tracks completion in SharePoint.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Orchestrator"
description: "During open enrollment, pulls pending status from Workday, sends reminders via Outlook, and tracks completion in SharePoint."
tags:
- hr
- workday
- microsoft-outlook
- sharepoint
- benefits
capability:
exposes:
- type: mcp
namespace: hr-benefits
port: 8080
tools:
- name: send-enrollment-reminders
description: "Given an enrollment period, identify pending enrollments and send reminders."
inputParameters:
- name: enrollment_period
in: body
type: string
description: "The enrollment period ID."
steps:
- name: get-pending
type: call
call: "workday.get-pending-enrollments"
with:
period: "{{enrollment_period}}"
- name: send-reminders
type: call
call: "outlook.send-bulk-email"
with:
recipients: "{{get-pending.pending_emails}}"
subject: "Complete Your Benefits Enrollment"
- name: update-tracker
type: call
call: "sharepoint.create-item"
with:
site_id: "marriott-hr-benefits"
list_name: "EnrollmentTracker"
fields:
period: "{{enrollment_period}}"
pending_count: "{{get-pending.total_pending}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: benefits
path: "/marriott/benefits/enrollments"
operations:
- name: get-pending-enrollments
method: GET
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/hr-benefits@marriott.com/sendMail"
operations:
- name: send-bulk-email
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: list-items
path: "/sites/{{site_id}}/lists/{{list_name}}/items"
inputParameters:
- name: site_id
in: path
- name: list_name
in: path
operations:
- name: create-item
method: POST
Orchestrates compensation review cycles by pulling data from Workday, refreshing Power BI dashboards, creating SharePoint folders, and notifying HR business partners.
naftiko: "0.5"
info:
label: "Workday Compensation Review Orchestrator"
description: "Orchestrates compensation review cycles by pulling data from Workday, refreshing Power BI dashboards, creating SharePoint folders, and notifying HR business partners."
tags:
- hr
- workday
- power-bi
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: initiate-comp-review
description: "Given a review cycle ID and department, orchestrate compensation review preparation."
inputParameters:
- name: cycle_id
in: body
type: string
description: "The compensation review cycle identifier."
- name: department
in: body
type: string
description: "The department name."
steps:
- name: get-employees
type: call
call: "workday.get-department-workers"
with:
department: "{{department}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "comp-review-{{cycle_id}}"
- name: create-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "marriott-hr-compensation"
folder_path: "CompReviews/{{cycle_id}}/{{department}}"
- name: notify-hrbp
type: call
call: "msteams.send-message"
with:
channel_id: "hr-business-partners"
message: "Comp review {{cycle_id}} initiated for {{department}}. {{get-employees.total_count}} associates in scope."
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: "/marriott/workers"
operations:
- name: get-department-workers
method: GET
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/sites/{{site_id}}/drive/root/children"
inputParameters:
- name: site_id
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves current headcount and open position data from Workday for a specified Marriott property code, returning staffing levels by department.
naftiko: "0.5"
info:
label: "Workday Headcount by Property Lookup"
description: "Retrieves current headcount and open position data from Workday for a specified Marriott property code, returning staffing levels by department."
tags:
- hr
- workday
- reporting
- hospitality
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-property-headcount
description: "Given a Marriott property code, retrieve current headcount and open positions from Workday."
inputParameters:
- name: property_code
in: body
type: string
description: "The Marriott property code."
call: "workday.get-headcount"
with:
property_code: "{{property_code}}"
outputParameters:
- name: total_headcount
type: string
mapping: "$.summary.total_active"
- name: open_positions
type: string
mapping: "$.summary.open_reqs"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/marriott/headcount/{{property_code}}"
inputParameters:
- name: property_code
in: path
operations:
- name: get-headcount
method: GET
Checks compliance training completion in Workday Learning, sends reminders via Outlook, and escalates to property HR leads via Teams.
naftiko: "0.5"
info:
label: "Workday Learning Compliance Tracker"
description: "Checks compliance training completion in Workday Learning, sends reminders via Outlook, and escalates to property HR leads via Teams."
tags:
- hr
- workday
- microsoft-outlook
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: hr-compliance
port: 8080
tools:
- name: track-compliance-training
description: "Given a property code and program ID, check completion and send reminders."
inputParameters:
- name: property_code
in: body
type: string
description: "The Marriott property code."
- name: program_id
in: body
type: string
description: "The training program ID."
steps:
- name: get-completion
type: call
call: "workday.get-training-status"
with:
property_code: "{{property_code}}"
program_id: "{{program_id}}"
- name: send-reminders
type: call
call: "outlook.send-bulk-email"
with:
recipients: "{{get-completion.overdue_emails}}"
subject: "Action Required: Complete compliance training"
- name: escalate-hr
type: call
call: "msteams.send-message"
with:
channel_id: "property-{{property_code}}-hr"
message: "Training alert: {{get-completion.completion_rate}}% complete. {{get-completion.overdue_count}} associates overdue."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: learning
path: "/marriott/learning/programs/{{program_id}}/status"
inputParameters:
- name: program_id
in: path
operations:
- name: get-training-status
method: GET
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/hr-noreply@marriott.com/sendMail"
operations:
- name: send-bulk-email
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Looks up open job requisitions in Workday and assigns them to the appropriate recruiter based on property and job family, then notifies the recruiter via Teams.
naftiko: "0.5"
info:
label: "Workday Open Requisition Recruiter Assignment"
description: "Looks up open job requisitions in Workday and assigns them to the appropriate recruiter based on property and job family, then notifies the recruiter via Teams."
tags:
- hr
- recruiting
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: assign-requisition-recruiter
description: "Given a Workday job requisition ID and recruiter UPN, retrieve requisition details, update the recruiter assignment, and notify the assigned recruiter via Teams with job details and priority. Use when opening new roles or reassigning requisitions between recruiters."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
- name: recruiter_upn
in: body
type: string
description: "UPN of the recruiter to assign to the requisition."
steps:
- name: get-requisition
type: call
call: "workday-recruiting.get-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: assign-recruiter
type: call
call: "workday-recruiting.update-requisition"
with:
requisition_id: "{{requisition_id}}"
recruiter_upn: "{{recruiter_upn}}"
- name: notify-recruiter
type: call
call: "msteams-recruiting.send-message"
with:
recipient_upn: "{{recruiter_upn}}"
text: "New requisition assigned: {{get-requisition.job_title}} at {{get-requisition.property_name}} ({{get-requisition.property_code}}). Req ID: {{requisition_id}}. Target fill date: {{get-requisition.target_fill_date}}."
consumes:
- type: http
namespace: workday-recruiting
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/marriott/jobRequisitions/{requisition_id}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- name: update-requisition
method: PATCH
- type: http
namespace: msteams-recruiting
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Retrieves organizational hierarchy data from Workday for a given manager or department.
naftiko: "0.5"
info:
label: "Workday Org Chart Lookup"
description: "Retrieves organizational hierarchy data from Workday for a given manager or department."
tags:
- hr
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: hr-org
port: 8080
tools:
- name: get-org-chart
description: "Given a worker ID, retrieve org chart data."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-supervisory-org"
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: direct_reports_count
type: string
mapping: "$.organization.direct_reports_count"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: organizations
path: "/marriott/workers/{{worker_id}}/supervisoryOrganization"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-supervisory-org
method: GET
Retrieves an associate's time off balances from Workday including vacation, sick leave, and personal days remaining.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves an associate's time off balances from Workday including vacation, sick leave, and personal days remaining."
tags:
- hr
- workday
- employee-experience
capability:
exposes:
- type: mcp
namespace: hr-self-service
port: 8080
tools:
- name: get-time-off-balance
description: "Given a Workday employee ID, retrieve current time off balances."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-time-off-balance"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: vacation_hours
type: string
mapping: "$.balances[0].balance"
- name: sick_hours
type: string
mapping: "$.balances[1].balance"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off
path: "/marriott/workers/{{worker_id}}/timeOffBalances"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-time-off-balance
method: GET
Submits a time-off request for an associate in Workday and notifies their manager via Microsoft Teams for approval.
naftiko: "0.5"
info:
label: "Workday Time-Off Request Processor"
description: "Submits a time-off request for an associate in Workday and notifies their manager via Microsoft Teams for approval."
tags:
- hr
- workday
- time-off
- microsoft-teams
- approval
capability:
exposes:
- type: mcp
namespace: hr-time-off
port: 8080
tools:
- name: submit-time-off-request
description: "Given a Workday employee ID, leave type, start date, and end date, submit a time-off request in Workday and notify the associate's manager via Teams for approval. Use when an associate requests vacation, sick leave, or personal time."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID of the associate requesting time off."
- name: leave_type
in: body
type: string
description: "The type of leave being requested (e.g., VACATION, SICK, PERSONAL)."
- name: start_date
in: body
type: string
description: "The first day of the requested leave in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "The last day of the requested leave in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday-pto.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: submit-leave
type: call
call: "workday-pto.create-leave-request"
with:
worker_id: "{{workday_employee_id}}"
leave_type: "{{leave_type}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: notify-manager
type: call
call: "msteams-pto.send-message"
with:
recipient_upn: "{{get-worker.manager_email}}"
text: "Time-off approval needed: {{get-worker.full_name}} has requested {{leave_type}} from {{start_date}} to {{end_date}}. Request ID: {{submit-leave.request_id}}. Please approve or deny in Workday."
consumes:
- type: http
namespace: workday-pto
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/marriott/workers/{worker_id}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- name: leave-requests
path: "/marriott/workers/{worker_id}/leaveRequests"
inputParameters:
- name: worker_id
in: path
operations:
- name: create-leave-request
method: POST
- type: http
namespace: msteams-pto
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/users/{upn}/chats"
inputParameters:
- name: upn
in: path
operations:
- name: send-message
method: POST
Pulls YouTube channel analytics for Marriott brand channels and posts digest to Teams.
naftiko: "0.5"
info:
label: "YouTube Brand Analytics Digest"
description: "Pulls YouTube channel analytics for Marriott brand channels and posts digest to Teams."
tags:
- marketing
- youtube
- microsoft-teams
- social-media
capability:
exposes:
- type: mcp
namespace: video-marketing
port: 8080
tools:
- name: generate-youtube-digest
description: "Given a YouTube channel ID, compile weekly analytics."
inputParameters:
- name: channel_id
in: body
type: string
description: "The YouTube channel ID."
steps:
- name: get-analytics
type: call
call: "youtube.get-channel-analytics"
with:
channel_id: "{{channel_id}}"
period: "last_7_days"
- name: post-digest
type: call
call: "msteams.send-message"
with:
channel_id: "content-marketing"
message: "YouTube Weekly: Views: {{get-analytics.rows[0][0]}}, Watch Time: {{get-analytics.rows[0][1]}}hrs"
consumes:
- type: http
namespace: youtube
baseUri: "https://youtubeanalytics.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.youtube_token"
resources:
- name: reports
path: "/reports"
operations:
- name: get-channel-analytics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{channel_id}}/channels/General/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves guest support ticket details from Zendesk for Marriott properties, surfacing status, priority, and agent assignment.
naftiko: "0.5"
info:
label: "Zendesk Guest Support Ticket Lookup"
description: "Retrieves guest support ticket details from Zendesk for Marriott properties, surfacing status, priority, and agent assignment."
tags:
- customer-service
- zendesk
- guest-experience
- hospitality
capability:
exposes:
- type: mcp
namespace: guest-support
port: 8080
tools:
- name: get-support-ticket
description: "Given a Zendesk ticket ID, retrieve ticket details including status and priority."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
call: "zendesk.get-ticket"
with:
ticket_id: "{{ticket_id}}"
outputParameters:
- name: status
type: string
mapping: "$.ticket.status"
- name: priority
type: string
mapping: "$.ticket.priority"
consumes:
- type: http
namespace: zendesk
baseUri: "https://marriott.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
Enriches corporate sales prospects with ZoomInfo firmographic data and updates Salesforce accounts.
naftiko: "0.5"
info:
label: "ZoomInfo Corporate Prospect Enrichment"
description: "Enriches corporate sales prospects with ZoomInfo firmographic data and updates Salesforce accounts."
tags:
- sales
- zoominfo
- salesforce
- data-enrichment
capability:
exposes:
- type: mcp
namespace: sales-enablement
port: 8080
tools:
- name: enrich-prospect
description: "Given a company domain, retrieve data from ZoomInfo and update Salesforce."
inputParameters:
- name: company_domain
in: body
type: string
description: "The prospect company domain."
- name: sf_account_id
in: body
type: string
description: "The Salesforce account ID."
steps:
- name: get-company
type: call
call: "zoominfo.search-company"
with:
domain: "{{company_domain}}"
- name: update-account
type: call
call: "salesforce.update-account"
with:
account_id: "{{sf_account_id}}"
fields:
NumberOfEmployees: "{{get-company.employeeCount}}"
AnnualRevenue: "{{get-company.revenue}}"
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://marriott.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