Sony Capabilities
Naftiko 0.5 capability definitions for Sony - 100 capabilities showing integration workflows and service orchestrations.
Fetches Adobe Analytics content performance metrics for Sony's owned media properties and publishes a weekly report to the digital marketing team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Adobe Analytics Content Performance Report"
description: "Fetches Adobe Analytics content performance metrics for Sony's owned media properties and publishes a weekly report to the digital marketing team's Microsoft Teams channel."
tags:
- marketing
- analytics
- adobe
- reporting
- microsoft-teams
- entertainment
capability:
exposes:
- type: mcp
namespace: digital-analytics
port: 8080
tools:
- name: report-content-performance
description: "Given an Adobe Analytics report suite ID and date range, retrieve page views, unique visitors, and engagement metrics for Sony owned media. Post a content performance digest to the marketing Teams channel."
inputParameters:
- name: report_suite_id
in: body
type: string
description: "The Adobe Analytics report suite ID (e.g., sonymusicom)."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
steps:
- name: get-analytics-report
type: call
call: "adobe-analytics.run-report"
with:
report_suite_id: "{{report_suite_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: post-performance-digest
type: call
call: "msteams-analytics.post-message"
with:
channel_id: "$secrets.digital_teams_channel"
text: "Content performance {{start_date}}-{{end_date}} | Suite: {{report_suite_id}} | Visits: {{get-analytics-report.visits}} | Unique Visitors: {{get-analytics-report.uniqueVisitors}}"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api/{{company_id}}/reports"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
resources:
- name: reports
path: "/ranked"
inputParameters:
- name: report_suite_id
in: query
operations:
- name: run-report
method: POST
- type: http
namespace: msteams-analytics
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: channel_id
in: path
operations:
- name: post-message
method: POST
When a Sony marketing creative asset is finalized in Adobe Creative Cloud Libraries, publishes the asset metadata and preview link to a Confluence brand guidelines page and notifies the marketing team in Teams.
naftiko: "0.5"
info:
label: "Adobe Creative Cloud Asset Publishing to Confluence"
description: "When a Sony marketing creative asset is finalized in Adobe Creative Cloud Libraries, publishes the asset metadata and preview link to a Confluence brand guidelines page and notifies the marketing team in Teams."
tags:
- marketing
- creative
- adobe
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: creative-publishing
port: 8080
tools:
- name: publish-creative-asset
description: "Given an Adobe Creative Cloud asset ID, retrieve asset metadata and publish it with a preview link to Confluence. Notify the marketing team in Teams. Use when creative assets are approved and ready for brand guidelines publication."
inputParameters:
- name: asset_id
in: body
type: string
description: "The Adobe Creative Cloud Library asset ID."
- name: confluence_page_id
in: body
type: string
description: "The Confluence page ID of the brand guidelines page to update."
steps:
- name: get-asset
type: call
call: "adobe-cc.get-asset"
with:
asset_id: "{{asset_id}}"
- name: update-confluence
type: call
call: "confluence.update-page"
with:
page_id: "{{confluence_page_id}}"
title: "Brand Asset: {{get-asset.name}}"
content: "Asset: {{get-asset.name}}\nType: {{get-asset.type}}\nURL: {{get-asset.previewUrl}}"
- name: notify-marketing
type: call
call: "msteams-mktg.post-message"
with:
channel_id: "$secrets.marketing_teams_channel"
text: "Creative asset {{get-asset.name}} published to Confluence brand guidelines."
consumes:
- type: http
namespace: adobe-cc
baseUri: "https://cc-libraries.adobe.io/api/v1"
authentication:
type: bearer
token: "$secrets.adobe_cc_token"
resources:
- name: assets
path: "/libraries/{{library_id}}/elements/{{asset_id}}"
inputParameters:
- name: asset_id
in: path
operations:
- name: get-asset
method: GET
- type: http
namespace: confluence
baseUri: "https://sony.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
- type: http
namespace: msteams-mktg
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
Passes user-generated content from Sony's platforms to the Anthropic Claude API for moderation classification, returning a content safety rating and recommended action.
naftiko: "0.5"
info:
label: "Anthropic AI Content Moderation Classifier"
description: "Passes user-generated content from Sony's platforms to the Anthropic Claude API for moderation classification, returning a content safety rating and recommended action."
tags:
- ai
- content-moderation
- anthropic
- gaming
- entertainment
capability:
exposes:
- type: mcp
namespace: content-moderation
port: 8080
tools:
- name: classify-content
description: "Given a piece of user-generated text content (e.g., from PlayStation Network or Sony community forums), send it to Anthropic Claude for content safety classification. Returns a safety rating and recommended moderation action."
inputParameters:
- name: content_text
in: body
type: string
description: "The user-generated content text to classify for safety."
- name: platform
in: body
type: string
description: "The Sony platform the content originates from (e.g., PSN, SonyMusicForum)."
call: "anthropic.create-message"
with:
model: "claude-opus-4-5"
max_tokens: 256
system: "You are a content safety classifier for Sony platforms. Classify content as SAFE, WARNING, or REMOVE with a brief reason."
user_content: "Platform: {{platform}}\nContent: {{content_text}}"
outputParameters:
- name: classification
type: string
mapping: "$.content[0].text"
consumes:
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
Detects Azure subscription cost anomalies for Sony's cloud infrastructure, enriches alerts with resource group context, and posts a spend alert to the FinOps team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Alert"
description: "Detects Azure subscription cost anomalies for Sony's cloud infrastructure, enriches alerts with resource group context, and posts a spend alert to the FinOps team's Microsoft Teams channel."
tags:
- cloud
- finops
- azure
- microsoft-teams
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: alert-cloud-cost-anomaly
description: "Given an Azure subscription ID, resource group, and anomalous spend amount, retrieve resource group context from Azure Resource Manager and post a cost anomaly alert to the FinOps Teams channel. Use when Azure Cost Management detects unexpected spend spikes."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the anomaly was detected."
- name: resource_group
in: body
type: string
description: "The Azure resource group name associated with the anomaly."
- name: anomaly_amount_usd
in: body
type: string
description: "The anomalous spend amount in USD."
steps:
- name: get-resource-group
type: call
call: "azure-mgmt.get-resource-group"
with:
subscription_id: "{{subscription_id}}"
resource_group: "{{resource_group}}"
- name: post-cost-alert
type: call
call: "msteams-finops.post-message"
with:
channel_id: "$secrets.finops_teams_channel"
text: "Cost anomaly: ${{anomaly_amount_usd}} in {{resource_group}} ({{get-resource-group.location}}) on subscription {{subscription_id}}"
consumes:
- type: http
namespace: azure-mgmt
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: resource-groups
path: "/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}"
inputParameters:
- name: subscription_id
in: path
- name: resource_group
in: path
operations:
- name: get-resource-group
method: GET
- 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: channel_id
in: path
operations:
- name: post-message
method: POST
When an Azure budget threshold is breached, creates a ServiceNow ticket and alerts FinOps.
naftiko: "0.5"
info:
label: "Azure Cost Budget Breach Notification"
description: "When an Azure budget threshold is breached, creates a ServiceNow ticket and alerts FinOps."
tags:
- finops
- azure
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: azure-cost-budget-breach-notification
description: "When an Azure budget threshold is breached, creates a ServiceNow ticket and alerts FinOps."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-azure
type: call
call: azure.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-azure.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_finops_team_id"
channel_id: "$secrets.teams_finops_channel_id"
text: "Azure Cost Budget Breach Notification: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: records
path: "/subscriptions"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When an Azure DevOps build fails, creates a Jira bug and notifies the development team in Teams.
naftiko: "0.5"
info:
label: "Azure DevOps Build Failure Notification"
description: "When an Azure DevOps build fails, creates a Jira bug and notifies the development team in Teams."
tags:
- devops
- azure-devops
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: azure-devops-build-failure-notification
description: "When an Azure DevOps build fails, creates a Jira bug and notifies the development team in Teams."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-azdo
type: call
call: azdo.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-azdo.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_devops_team_id"
channel_id: "$secrets.teams_devops_channel_id"
text: "Azure DevOps Build Failure Notification: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: records
path: "/pipelines"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When an Azure DevOps release is triggered, creates a ServiceNow standard change and notifies the CAB.
naftiko: "0.5"
info:
label: "Azure DevOps Release to ServiceNow Change"
description: "When an Azure DevOps release is triggered, creates a ServiceNow standard change and notifies the CAB."
tags:
- devops
- azure-devops
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: azure-devops-release-to-servicenow-change
description: "When an Azure DevOps release is triggered, creates a ServiceNow standard change and notifies the CAB."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-azdo
type: call
call: azdo.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-azdo.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_devops_team_id"
channel_id: "$secrets.teams_devops_channel_id"
text: "Azure DevOps Release to ServiceNow Change: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: records
path: "/pipelines"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Azure Policy detects a non-compliant resource, creates a Jira remediation ticket.
naftiko: "0.5"
info:
label: "Azure Resource Compliance to Jira Remediation"
description: "When Azure Policy detects a non-compliant resource, creates a Jira remediation ticket."
tags:
- compliance
- azure
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: azure-resource-compliance-to-jira-remediation
description: "When Azure Policy detects a non-compliant resource, creates a Jira remediation ticket."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-azure
type: call
call: azure.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-azure.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_compliance_team_id"
channel_id: "$secrets.teams_compliance_channel_id"
text: "Azure Resource Compliance to Jira Remediation: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: records
path: "/subscriptions"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Lists all resources within an Azure resource group.
naftiko: "0.5"
info:
label: "Azure Resource Group Inventory"
description: "Lists all resources within an Azure resource group."
tags:
- cloud
- azure
- infrastructure
capability:
exposes:
- type: mcp
namespace: cloud
port: 8080
tools:
- name: list-resources
description: "Given an Azure resource group, return the resource list."
inputParameters:
- name: resource_group
in: body
type: string
description: "Azure resource group name."
call: azure.list-resources
with:
resourceGroupName: "{{resource_group}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: resources
path: "/subscriptions"
inputParameters:
- name: resourceGroupName
in: path
operations:
- name: list-resources
method: GET
When Azure Defender raises a security alert, creates a ServiceNow security incident and notifies the SOC team.
naftiko: "0.5"
info:
label: "Azure Security Alert to Incident Response"
description: "When Azure Defender raises a security alert, creates a ServiceNow security incident and notifies the SOC team."
tags:
- security
- azure
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: azure-security-alert-to-incident-response
description: "When Azure Defender raises a security alert, creates a ServiceNow security incident and notifies the SOC team."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-azure
type: call
call: azure.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-azure.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_security_team_id"
channel_id: "$secrets.teams_security_channel_id"
text: "Azure Security Alert to Incident Response: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: records
path: "/subscriptions"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Checks the current power state of an Azure virtual machine.
naftiko: "0.5"
info:
label: "Azure VM Power State Check"
description: "Checks the current power state of an Azure virtual machine."
tags:
- cloud
- azure
- compute
capability:
exposes:
- type: mcp
namespace: cloud
port: 8080
tools:
- name: get-vm-power-state
description: "Given a VM name, return the current power state."
inputParameters:
- name: vm_name
in: body
type: string
description: "Azure VM name."
call: azure.get-vm-status
with:
vmName: "{{vm_name}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: vms
path: "/virtualMachines"
inputParameters:
- name: vmName
in: path
operations:
- name: get-vm-status
method: GET
After a major Sony platform incident is resolved in ServiceNow, generates and publishes a postmortem document to Confluence and notifies the engineering leadership team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Confluence Incident Postmortem Publisher"
description: "After a major Sony platform incident is resolved in ServiceNow, generates and publishes a postmortem document to Confluence and notifies the engineering leadership team in Microsoft Teams."
tags:
- itsm
- knowledge-management
- confluence
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: postmortem-ops
port: 8080
tools:
- name: publish-postmortem
description: "Given a resolved ServiceNow incident number, retrieve resolution notes and root cause, and create a Confluence postmortem article in the engineering space. Notify engineering leadership in Teams. Use after major incidents are closed."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., INC0012345)."
- name: confluence_space_key
in: body
type: string
description: "The Confluence space key for the engineering postmortem library (e.g., POSTMORTEM)."
steps:
- name: get-incident
type: call
call: "servicenow-pm.get-incident"
with:
number: "{{incident_number}}"
- name: create-postmortem
type: call
call: "confluence-pm.create-page"
with:
space_key: "{{confluence_space_key}}"
title: "Postmortem: {{get-incident.short_description}} ({{incident_number}})"
body: "Incident: {{incident_number}}\nRCA: {{get-incident.rca}}\nResolution: {{get-incident.close_notes}}\nDuration: {{get-incident.duration}}"
- name: notify-leadership
type: call
call: "msteams-leadership.post-message"
with:
channel_id: "$secrets.engineering_leadership_teams_channel"
text: "Postmortem published for {{incident_number}}: {{get-incident.short_description}}. Confluence: {{create-postmortem.pageUrl}}"
consumes:
- type: http
namespace: servicenow-pm
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
- type: http
namespace: confluence-pm
baseUri: "https://sony.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams-leadership
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: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves the content and metadata of a Confluence page by page ID.
naftiko: "0.5"
info:
label: "Confluence Page Content Lookup"
description: "Retrieves the content and metadata of a Confluence page by page ID."
tags:
- knowledge-management
- confluence
- documentation
capability:
exposes:
- type: mcp
namespace: knowledge
port: 8080
tools:
- name: get-page-content
description: "Given a Confluence page ID, return the title and body."
inputParameters:
- name: page_id
in: body
type: string
description: "Confluence page ID."
call: confluence.get-page
with:
id: "{{page_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: confluence
baseUri: "https://sony.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content"
inputParameters:
- name: id
in: path
operations:
- name: get-page
method: GET
Syncs an updated Confluence runbook to a ServiceNow knowledge base article and notifies operations.
naftiko: "0.5"
info:
label: "Confluence Runbook to ServiceNow KB Sync"
description: "Syncs an updated Confluence runbook to a ServiceNow knowledge base article and notifies operations."
tags:
- knowledge-management
- confluence
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: knowledge-management
port: 8080
tools:
- name: confluence-runbook-to-servicenow-kb-sync
description: "Syncs an updated Confluence runbook to a ServiceNow knowledge base article and notifies operations."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-confluence
type: call
call: confluence.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-confluence.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_knowledge_management_team_id"
channel_id: "$secrets.teams_knowledge_management_channel_id"
text: "Confluence Runbook to ServiceNow KB Sync: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://sony.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: records
path: "/content"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Datadog triggers a critical alert, creates a ServiceNow P1 incident and pages the on-call engineer via PagerDuty.
naftiko: "0.5"
info:
label: "Datadog Alert to ServiceNow Incident"
description: "When Datadog triggers a critical alert, creates a ServiceNow P1 incident and pages the on-call engineer via PagerDuty."
tags:
- observability
- datadog
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: datadog-alert-to-servicenow-incident
description: "When Datadog triggers a critical alert, creates a ServiceNow P1 incident and pages the on-call engineer via PagerDuty."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-datadog
type: call
call: datadog.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-datadog.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_observability_team_id"
channel_id: "$secrets.teams_observability_channel_id"
text: "Datadog Alert to ServiceNow Incident: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: records
path: "/events"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Datadog APM detects latency degradation, triggers a GitHub Actions rollback and creates a Jira incident.
naftiko: "0.5"
info:
label: "Datadog APM Degradation to Rollback"
description: "When Datadog APM detects latency degradation, triggers a GitHub Actions rollback and creates a Jira incident."
tags:
- observability
- datadog
- github
- jira
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: datadog-apm-degradation-to-rollback
description: "When Datadog APM detects latency degradation, triggers a GitHub Actions rollback and creates a Jira incident."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-datadog
type: call
call: datadog.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-github
type: call
call: github.create-record
with:
reference: "{{process-datadog.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_observability_team_id"
channel_id: "$secrets.teams_observability_channel_id"
text: "Datadog APM Degradation to Rollback: {{source_id}} | {{summary}} | Ref: {{create-github.id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: records
path: "/events"
operations:
- name: process-record
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: records
path: "/repos"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Datadog detects disk usage above 85 percent, creates a ServiceNow capacity request and notifies infra.
naftiko: "0.5"
info:
label: "Datadog Disk Usage to Capacity Planning"
description: "When Datadog detects disk usage above 85 percent, creates a ServiceNow capacity request and notifies infra."
tags:
- infrastructure
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infrastructure
port: 8080
tools:
- name: datadog-disk-usage-to-capacity-planning
description: "When Datadog detects disk usage above 85 percent, creates a ServiceNow capacity request and notifies infra."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-datadog
type: call
call: datadog.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-datadog.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_infrastructure_team_id"
channel_id: "$secrets.teams_infrastructure_channel_id"
text: "Datadog Disk Usage to Capacity Planning: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: records
path: "/events"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Datadog detects an error rate spike correlated with a feature flag, creates a Jira incident.
naftiko: "0.5"
info:
label: "Datadog Error Rate to Feature Flag Disable"
description: "When Datadog detects an error rate spike correlated with a feature flag, creates a Jira incident."
tags:
- observability
- datadog
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: datadog-error-rate-to-feature-flag-disable
description: "When Datadog detects an error rate spike correlated with a feature flag, creates a Jira incident."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-datadog
type: call
call: datadog.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-datadog.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_observability_team_id"
channel_id: "$secrets.teams_observability_channel_id"
text: "Datadog Error Rate to Feature Flag Disable: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: records
path: "/events"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Datadog detects an anomalous log pattern, creates a ServiceNow investigation and pages SOC.
naftiko: "0.5"
info:
label: "Datadog Log Anomaly to Security Investigation"
description: "When Datadog detects an anomalous log pattern, creates a ServiceNow investigation and pages SOC."
tags:
- security
- datadog
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: datadog-log-anomaly-to-security-investigation
description: "When Datadog detects an anomalous log pattern, creates a ServiceNow investigation and pages SOC."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-datadog
type: call
call: datadog.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-datadog.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_security_team_id"
channel_id: "$secrets.teams_security_channel_id"
text: "Datadog Log Anomaly to Security Investigation: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: records
path: "/events"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries the current health status of a monitored service in Datadog.
naftiko: "0.5"
info:
label: "Datadog Service Status Check"
description: "Queries the current health status of a monitored service in Datadog."
tags:
- observability
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-status
description: "Given a Datadog service name, return the current monitor status."
inputParameters:
- name: service_name
in: body
type: string
description: "Name of the service to check."
call: datadog.search-monitors
with:
query: "{{service_name}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/search"
inputParameters:
- name: query
in: query
operations:
- name: search-monitors
method: GET
When a Datadog SLO breach is detected for a Sony service, opens a ServiceNow incident and triggers a PagerDuty page to the on-call engineer.
naftiko: "0.5"
info:
label: "Datadog SLO Breach to PagerDuty Escalation"
description: "When a Datadog SLO breach is detected for a Sony service, opens a ServiceNow incident and triggers a PagerDuty page to the on-call engineer."
tags:
- observability
- slo
- datadog
- pagerduty
- servicenow
capability:
exposes:
- type: mcp
namespace: slo-response
port: 8080
tools:
- name: handle-slo-breach
description: "Given a Datadog SLO ID, service name, and remaining error budget, open a ServiceNow incident and trigger PagerDuty to page the on-call engineer. Use when a Sony platform SLO drops below its error budget threshold."
inputParameters:
- name: slo_id
in: body
type: string
description: "The Datadog SLO ID that breached its threshold."
- name: service_name
in: body
type: string
description: "The name of the service whose SLO was breached."
- name: remaining_budget_pct
in: body
type: string
description: "The remaining error budget percentage at time of breach."
steps:
- name: get-slo
type: call
call: "datadog-slo.get-slo"
with:
slo_id: "{{slo_id}}"
- name: create-incident
type: call
call: "servicenow-slo.create-incident"
with:
short_description: "SLO breach: {{service_name}} error budget {{remaining_budget_pct}}% remaining"
category: "platform"
urgency: "critical"
- name: page-oncall
type: call
call: "pagerduty-slo.trigger-incident"
with:
service_id: "$secrets.pagerduty_service_id"
summary: "SLO breach for {{service_name}}: {{remaining_budget_pct}}% budget remaining"
severity: "critical"
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/{{slo_id}}"
inputParameters:
- name: slo_id
in: path
operations:
- name: get-slo
method: GET
- type: http
namespace: servicenow-slo
baseUri: "https://sony.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: pagerduty-slo
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: trigger-incident
method: POST
When a Datadog synthetic test fails, creates a ServiceNow incident and triggers a PagerDuty alert.
naftiko: "0.5"
info:
label: "Datadog Synthetic Failure to Incident"
description: "When a Datadog synthetic test fails, creates a ServiceNow incident and triggers a PagerDuty alert."
tags:
- observability
- datadog
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: datadog-synthetic-failure-to-incident
description: "When a Datadog synthetic test fails, creates a ServiceNow incident and triggers a PagerDuty alert."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-datadog
type: call
call: datadog.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-datadog.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_observability_team_id"
channel_id: "$secrets.teams_observability_channel_id"
text: "Datadog Synthetic Failure to Incident: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: records
path: "/events"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves the health status of a monitored host in Dynatrace.
naftiko: "0.5"
info:
label: "Dynatrace Host Health Lookup"
description: "Retrieves the health status of a monitored host in Dynatrace."
tags:
- observability
- dynatrace
- monitoring
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-host-health
description: "Given a Dynatrace host ID, return the health state."
inputParameters:
- name: host_id
in: body
type: string
description: "Dynatrace host entity ID."
call: dynatrace.get-host
with:
entityId: "{{host_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://api.example.com/v1"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: entities
path: "/entities"
inputParameters:
- name: entityId
in: path
operations:
- name: get-host
method: GET
When a new hire record is created in Workday, provisions a Microsoft 365 account via Graph API, opens a ServiceNow onboarding ticket, and sends a Teams welcome message to the new hire and their manager.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire record is created in Workday, provisions a Microsoft 365 account via Graph API, opens a ServiceNow onboarding ticket, and sends a Teams welcome message to the new hire and their manager."
tags:
- hr
- onboarding
- workday
- microsoft-365
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday worker ID and start date, orchestrate the full onboarding sequence: provision a Microsoft 365 account, open a ServiceNow ticket, and send Teams welcome messages. Use when a new hire is confirmed in Workday."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The new hire's start date in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: provision-account
type: call
call: "msgraph.create-user"
with:
displayName: "{{get-worker.firstName}} {{get-worker.lastName}}"
mail: "{{get-worker.email}}"
department: "{{get-worker.department}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-worker.firstName}} {{get-worker.lastName}}"
category: "hr_onboarding"
assignment_group: "IT_Onboarding"
- name: send-welcome
type: call
call: "msteams.post-message"
with:
channel_id: "$secrets.hr_teams_channel"
text: "Welcome {{get-worker.firstName}} {{get-worker.lastName}}! Starting {{start_date}}. ServiceNow ticket: {{open-ticket.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- 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: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug with pipeline context and posts a failure alert to the Microsoft Teams engineering channel.
naftiko: "0.5"
info:
label: "GitHub Actions CI/CD Pipeline Failure Handler"
description: "When a GitHub Actions pipeline fails on a protected branch, creates a Jira bug with pipeline context and posts a failure alert to the Microsoft Teams engineering channel."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cicd-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a failed GitHub Actions run ID, repo, and branch, open a Jira bug and post a Teams alert with full context. Use when automated pipelines fail on protected branches requiring engineering triage."
inputParameters:
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: branch
in: body
type: string
description: "The branch where the failure occurred."
- name: commit_sha
in: body
type: string
description: "The commit SHA associated with the failed run."
steps:
- name: get-run
type: call
call: "github.get-workflow-run"
with:
repo: "{{repo}}"
run_id: "{{run_id}}"
- name: create-bug
type: call
call: "jira-ci.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo}} / {{branch}}"
description: "Run: {{run_id}}\nCommit: {{commit_sha}}\nConclusion: {{get-run.conclusion}}"
- name: post-alert
type: call
call: "msteams-ci.post-message"
with:
channel_id: "$secrets.cicd_teams_channel"
text: "Pipeline failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/runs/{{run_id}}"
inputParameters:
- name: repo
in: path
- name: run_id
in: path
operations:
- name: get-workflow-run
method: GET
- type: http
namespace: jira-ci
baseUri: "https://sony.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: msteams-ci
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: channel_id
in: path
operations:
- name: post-message
method: POST
When GitHub Actions tests fail, creates a Jira bug and alerts the QA channel in Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub Actions Test Failure to Teams Alert"
description: "When GitHub Actions tests fail, creates a Jira bug and alerts the QA channel in Microsoft Teams."
tags:
- devops
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: github-actions-test-failure-to-teams-alert
description: "When GitHub Actions tests fail, creates a Jira bug and alerts the QA channel in Microsoft Teams."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-github
type: call
call: github.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-github.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_devops_team_id"
channel_id: "$secrets.teams_devops_channel_id"
text: "GitHub Actions Test Failure to Teams Alert: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: records
path: "/repos"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When code scanning finds a high-severity issue, creates a Jira remediation ticket and notifies security.
naftiko: "0.5"
info:
label: "GitHub Code Scanning to Jira Remediation"
description: "When code scanning finds a high-severity issue, creates a Jira remediation ticket and notifies security."
tags:
- security
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: github-code-scanning-to-jira-remediation
description: "When code scanning finds a high-severity issue, creates a Jira remediation ticket and notifies security."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-github
type: call
call: github.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-github.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_security_team_id"
channel_id: "$secrets.teams_security_channel_id"
text: "GitHub Code Scanning to Jira Remediation: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: records
path: "/repos"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Dependabot raises a critical vulnerability, creates a ServiceNow security change and notifies AppSec.
naftiko: "0.5"
info:
label: "GitHub Dependabot Alert to Security Review"
description: "When Dependabot raises a critical vulnerability, creates a ServiceNow security change and notifies AppSec."
tags:
- security
- github
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: github-dependabot-alert-to-security-review
description: "When Dependabot raises a critical vulnerability, creates a ServiceNow security change and notifies AppSec."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-github
type: call
call: github.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-github.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_security_team_id"
channel_id: "$secrets.teams_security_channel_id"
text: "GitHub Dependabot Alert to Security Review: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: records
path: "/repos"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a GitHub pull request is merged, transitions the linked Jira issue to Done and posts a release note to Confluence.
naftiko: "0.5"
info:
label: "GitHub PR Merge to Jira Transition"
description: "When a GitHub pull request is merged, transitions the linked Jira issue to Done and posts a release note to Confluence."
tags:
- devops
- github
- jira
- confluence
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: github-pr-merge-to-jira-transition
description: "When a GitHub pull request is merged, transitions the linked Jira issue to Done and posts a release note to Confluence."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-github
type: call
call: github.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-github.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_devops_team_id"
channel_id: "$secrets.teams_devops_channel_id"
text: "GitHub PR Merge to Jira Transition: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: records
path: "/repos"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves repository metadata from GitHub including language and default branch.
naftiko: "0.5"
info:
label: "GitHub Repository Details Lookup"
description: "Retrieves repository metadata from GitHub including language and default branch."
tags:
- devops
- github
- repositories
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: get-repository-details
description: "Given an org and repo name, return the primary language."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository name."
call: github.get-repo
with:
repo: "{{repo}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
Retrieves Dependabot security vulnerability alerts from GitHub for Sony engineering repositories and creates Jira security tickets for high or critical severity findings.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Alert to Jira"
description: "Retrieves Dependabot security vulnerability alerts from GitHub for Sony engineering repositories and creates Jira security tickets for high or critical severity findings."
tags:
- security
- devops
- github
- jira
capability:
exposes:
- type: mcp
namespace: security-scanning
port: 8080
tools:
- name: scan-repo-vulnerabilities
description: "Given a GitHub repository and severity threshold, retrieve Dependabot vulnerability alerts and create Jira security tickets for each finding at or above the threshold. Use for weekly security posture reviews."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format (e.g., SonyPictures/content-delivery)."
- name: severity_threshold
in: body
type: string
description: "Minimum severity to report: low, medium, high, or critical."
steps:
- name: get-vuln-alerts
type: call
call: "github-sec.list-dependabot-alerts"
with:
repo: "{{repo}}"
severity: "{{severity_threshold}}"
- name: create-sec-ticket
type: call
call: "jira-sec.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "Security vulnerability in {{repo}}: {{get-vuln-alerts.securityVulnerability.package.name}}"
description: "Severity: {{get-vuln-alerts.severity}}\nRepo: {{repo}}\nPackage: {{get-vuln-alerts.securityVulnerability.package.name}}"
consumes:
- type: http
namespace: github-sec
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{repo}}/dependabot/alerts"
inputParameters:
- name: repo
in: path
- name: severity
in: query
operations:
- name: list-dependabot-alerts
method: GET
- type: http
namespace: jira-sec
baseUri: "https://sony.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
Retrieves the current stage and amount of a HubSpot deal.
naftiko: "0.5"
info:
label: "HubSpot Deal Stage Lookup"
description: "Retrieves the current stage and amount of a HubSpot deal."
tags:
- crm
- hubspot
- sales
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-deal-stage
description: "Given a HubSpot deal ID, return the deal stage."
inputParameters:
- name: deal_id
in: body
type: string
description: "HubSpot deal ID."
call: hubspot.get-deal
with:
dealId: "{{deal_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: deals
path: "/objects/deals"
inputParameters:
- name: dealId
in: path
operations:
- name: get-deal
method: GET
When a HubSpot form is submitted, creates a Salesforce lead and notifies the SDR team.
naftiko: "0.5"
info:
label: "HubSpot Form Submission to Salesforce Lead"
description: "When a HubSpot form is submitted, creates a Salesforce lead and notifies the SDR team."
tags:
- marketing
- hubspot
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: marketing
port: 8080
tools:
- name: hubspot-form-submission-to-salesforce-lead
description: "When a HubSpot form is submitted, creates a Salesforce lead and notifies the SDR team."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-hubspot
type: call
call: hubspot.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-salesforce
type: call
call: salesforce.create-record
with:
reference: "{{process-hubspot.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_marketing_team_id"
channel_id: "$secrets.teams_marketing_channel_id"
text: "HubSpot Form Submission to Salesforce Lead: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: records
path: "/objects"
operations:
- name: process-record
method: POST
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When all stories in a Jira epic are completed, generates a Confluence summary and notifies stakeholders.
naftiko: "0.5"
info:
label: "Jira Epic Completion to Stakeholder Update"
description: "When all stories in a Jira epic are completed, generates a Confluence summary and notifies stakeholders."
tags:
- project-management
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: project-management
port: 8080
tools:
- name: jira-epic-completion-to-stakeholder-update
description: "When all stories in a Jira epic are completed, generates a Confluence summary and notifies stakeholders."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-jira
type: call
call: jira.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-confluence
type: call
call: confluence.create-record
with:
reference: "{{process-jira.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_project_management_team_id"
channel_id: "$secrets.teams_project_management_channel_id"
text: "Jira Epic Completion to Stakeholder Update: {{source_id}} | {{summary}} | Ref: {{create-confluence.id}}"
consumes:
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: process-record
method: POST
- type: http
namespace: confluence
baseUri: "https://sony.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: records
path: "/content"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves the current status, assignee, and priority of a Jira issue.
naftiko: "0.5"
info:
label: "Jira Issue Status Lookup"
description: "Retrieves the current status, assignee, and priority of a Jira issue."
tags:
- project-management
- jira
- issue-tracking
capability:
exposes:
- type: mcp
namespace: project-management
port: 8080
tools:
- name: get-issue-status
description: "Given a Jira issue key, return the current status."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key."
call: jira.get-issue
with:
issue_id: "{{issue_key}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
inputParameters:
- name: issue_id
in: path
operations:
- name: get-issue
method: GET
When a Jira release is published, generates a changelog in Confluence and notifies the product Teams channel.
naftiko: "0.5"
info:
label: "Jira Release to Confluence Changelog"
description: "When a Jira release is published, generates a changelog in Confluence and notifies the product Teams channel."
tags:
- release-management
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: release-management
port: 8080
tools:
- name: jira-release-to-confluence-changelog
description: "When a Jira release is published, generates a changelog in Confluence and notifies the product Teams channel."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-jira
type: call
call: jira.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-confluence
type: call
call: confluence.create-record
with:
reference: "{{process-jira.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_release_management_team_id"
channel_id: "$secrets.teams_release_management_channel_id"
text: "Jira Release to Confluence Changelog: {{source_id}} | {{summary}} | Ref: {{create-confluence.id}}"
consumes:
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: process-record
method: POST
- type: http
namespace: confluence
baseUri: "https://sony.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: records
path: "/content"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves completed sprint issues from Jira at sprint close, calculates velocity and bug rate metrics, and publishes a sprint retrospective summary to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Retrospective Publisher"
description: "Retrieves completed sprint issues from Jira at sprint close, calculates velocity and bug rate metrics, and publishes a sprint retrospective summary to the engineering Microsoft Teams channel."
tags:
- devops
- agile
- jira
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sprint-reporting
port: 8080
tools:
- name: publish-sprint-retrospective
description: "Given a Jira board ID and sprint ID, retrieve completed and incomplete issues, calculate velocity, and post a sprint retrospective summary to the engineering Teams channel. Use after each sprint close."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID (numeric)."
- name: sprint_id
in: body
type: string
description: "The completed Jira sprint ID."
steps:
- name: get-sprint
type: call
call: "jira-sprint.get-sprint"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: get-sprint-issues
type: call
call: "jira-sprint-issues.search-issues"
with:
sprint_id: "{{sprint_id}}"
- name: post-retro
type: call
call: "msteams-retro.post-message"
with:
channel_id: "$secrets.engineering_teams_channel"
text: "Sprint {{get-sprint.name}} closed. Completed: {{get-sprint-issues.total}} issues. Sprint ID: {{sprint_id}}"
consumes:
- type: http
namespace: jira-sprint
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprints
path: "/board/{{board_id}}/sprint/{{sprint_id}}"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint
method: GET
- type: http
namespace: jira-sprint-issues
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/search"
inputParameters:
- name: sprint_id
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: msteams-retro
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: channel_id
in: path
operations:
- name: post-message
method: POST
Fetches post performance metrics from LinkedIn and Meta for Sony's brand channels and publishes a unified weekly social media performance report to the marketing Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn and Meta Social Content Performance Report"
description: "Fetches post performance metrics from LinkedIn and Meta for Sony's brand channels and publishes a unified weekly social media performance report to the marketing Teams channel."
tags:
- marketing
- social
- linkedin
- meta
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: social-reporting
port: 8080
tools:
- name: digest-social-performance
description: "Retrieve post engagement metrics from LinkedIn and Meta for the past week and post a unified social performance digest to the marketing Teams channel. Use for weekly social media review meetings."
inputParameters:
- name: linkedin_org_id
in: body
type: string
description: "The LinkedIn organization URN for Sony's company page."
- name: meta_page_id
in: body
type: string
description: "The Meta Facebook page ID for Sony's brand page."
steps:
- name: get-linkedin-stats
type: call
call: "linkedin.get-org-stats"
with:
org_id: "{{linkedin_org_id}}"
- name: get-meta-stats
type: call
call: "meta.get-page-insights"
with:
page_id: "{{meta_page_id}}"
- name: post-report
type: call
call: "msteams-social.post-message"
with:
channel_id: "$secrets.marketing_teams_channel"
text: "Weekly Social Report | LinkedIn Impressions: {{get-linkedin-stats.impressions}} | Meta Reach: {{get-meta-stats.reach}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: org-stats
path: "/organizationalEntityShareStatistics"
inputParameters:
- name: org_id
in: query
operations:
- name: get-org-stats
method: GET
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_access_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: channel_id
in: path
operations:
- name: post-message
method: POST
When a LinkedIn campaign generates leads, imports them into Salesforce and notifies the sales team.
naftiko: "0.5"
info:
label: "LinkedIn Campaign to Salesforce Lead Import"
description: "When a LinkedIn campaign generates leads, imports them into Salesforce and notifies the sales team."
tags:
- marketing
- linkedin
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: marketing
port: 8080
tools:
- name: linkedin-campaign-to-salesforce-lead-import
description: "When a LinkedIn campaign generates leads, imports them into Salesforce and notifies the sales team."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-linkedin
type: call
call: linkedin.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-salesforce
type: call
call: salesforce.create-record
with:
reference: "{{process-linkedin.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_marketing_team_id"
channel_id: "$secrets.teams_marketing_channel_id"
text: "LinkedIn Campaign to Salesforce Lead Import: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: records
path: "/campaigns"
operations:
- name: process-record
method: POST
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Publishes approved job requisitions from Workday Recruiting to LinkedIn Jobs and notifies the talent acquisition team in Microsoft Teams when postings go live.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting for Sony Talent Acquisition"
description: "Publishes approved job requisitions from Workday Recruiting to LinkedIn Jobs and notifies the talent acquisition team in Microsoft Teams when postings go live."
tags:
- hr
- recruiting
- linkedin
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: talent-acquisition
port: 8080
tools:
- name: publish-job-to-linkedin
description: "Given a Workday job requisition ID, retrieve job details and publish the posting to LinkedIn under Sony's company page. Notify the TA team in Teams when the posting is live. Use when requisitions are approved for external posting."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
- name: linkedin_org_id
in: body
type: string
description: "The LinkedIn organization URN for the Sony entity posting the role."
steps:
- name: get-requisition
type: call
call: "workday-recruiting.get-job-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: post-job
type: call
call: "linkedin-jobs.create-job-posting"
with:
organization_id: "{{linkedin_org_id}}"
title: "{{get-requisition.jobTitle}}"
description: "{{get-requisition.jobDescription}}"
location: "{{get-requisition.location}}"
- name: notify-ta-team
type: call
call: "msteams-ta.post-message"
with:
channel_id: "$secrets.recruiting_teams_channel"
text: "Job {{get-requisition.jobTitle}} posted to LinkedIn. LinkedIn Posting ID: {{post-job.postingId}}"
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: job-requisitions
path: "/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-job-requisition
method: GET
- type: http
namespace: linkedin-jobs
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/simpleJobPostings"
operations:
- name: create-job-posting
method: POST
- type: http
namespace: msteams-ta
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: channel_id
in: path
operations:
- name: post-message
method: POST
Fetches campaign performance metrics from Marketo for Sony's marketing programs and publishes a weekly digest to the marketing team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Marketo Campaign Performance Digest"
description: "Fetches campaign performance metrics from Marketo for Sony's marketing programs and publishes a weekly digest to the marketing team's Microsoft Teams channel."
tags:
- marketing
- marketo
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Given a Marketo program ID and date range, retrieve email performance metrics (opens, clicks, conversions) and post a weekly campaign digest to the marketing Teams channel. Use for weekly marketing performance reviews."
inputParameters:
- name: program_id
in: body
type: string
description: "The Marketo program ID to report on."
- name: start_date
in: body
type: string
description: "Report start date in ISO 8601 format."
- name: end_date
in: body
type: string
description: "Report end date in ISO 8601 format."
steps:
- name: get-program-stats
type: call
call: "marketo.get-program-stats"
with:
program_id: "{{program_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: post-digest
type: call
call: "msteams-mktg-digest.post-message"
with:
channel_id: "$secrets.marketing_teams_channel"
text: "Campaign digest {{start_date}} to {{end_date}} | Program {{program_id}} | Opens: {{get-program-stats.opens}} | Clicks: {{get-program-stats.clicks}}"
consumes:
- type: http
namespace: marketo
baseUri: "https://sony.mktorest.com/rest/v1"
authentication:
type: bearer
token: "$secrets.marketo_token"
resources:
- name: program-stats
path: "/stats/usage/last7days.json"
inputParameters:
- name: program_id
in: query
operations:
- name: get-program-stats
method: GET
- type: http
namespace: msteams-mktg-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: channel_id
in: path
operations:
- name: post-message
method: POST
Lists all channels in a Microsoft Teams team.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel List"
description: "Lists all channels in a Microsoft Teams team."
tags:
- collaboration
- microsoft-teams
- messaging
capability:
exposes:
- type: mcp
namespace: collaboration
port: 8080
tools:
- name: list-team-channels
description: "Given a Teams team ID, return the channel list."
inputParameters:
- name: team_id
in: body
type: string
description: "Microsoft Teams team ID."
call: msteams.list-channels
with:
teamId: "{{team_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: msteams
baseUri: "https://api.example.com/v1"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams"
inputParameters:
- name: teamId
in: path
operations:
- name: list-channels
method: GET
Assigns appropriate Okta application groups to new employees based on their department and role from Workday, enabling single sign-on access to Sony's SaaS applications.
naftiko: "0.5"
info:
label: "Okta Identity Provisioning for New Hires"
description: "Assigns appropriate Okta application groups to new employees based on their department and role from Workday, enabling single sign-on access to Sony's SaaS applications."
tags:
- identity
- security
- okta
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: identity-provisioning
port: 8080
tools:
- name: provision-okta-access
description: "Given a Workday worker ID, retrieve the employee's role and department, look up their Okta profile, and assign the appropriate application groups. Notify IT in Teams on completion. Use during onboarding or role changes."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID for the employee."
- name: okta_group_ids
in: body
type: string
description: "Comma-separated Okta group IDs to assign based on department and role."
steps:
- name: get-worker
type: call
call: "workday-okta.get-worker"
with:
worker_id: "{{worker_id}}"
- name: find-okta-user
type: call
call: "okta-lookup.get-user"
with:
email: "{{get-worker.email}}"
- name: assign-groups
type: call
call: "okta-groups.assign-user-to-group"
with:
user_id: "{{find-okta-user.id}}"
group_ids: "{{okta_group_ids}}"
- name: notify-it
type: call
call: "msteams-it.post-message"
with:
channel_id: "$secrets.it_teams_channel"
text: "Okta access provisioned for {{get-worker.email}}. Groups: {{okta_group_ids}}"
consumes:
- type: http
namespace: workday-okta
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta-lookup
baseUri: "https://sony.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
inputParameters:
- name: email
in: query
operations:
- name: get-user
method: GET
- type: http
namespace: okta-groups
baseUri: "https://sony.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-user-to-group
method: PUT
- type: http
namespace: msteams-it
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: channel_id
in: path
operations:
- name: post-message
method: POST
When Okta detects suspicious login activity, creates a ServiceNow security incident and alerts SOC via PagerDuty.
naftiko: "0.5"
info:
label: "Okta Suspicious Activity to SOC Alert"
description: "When Okta detects suspicious login activity, creates a ServiceNow security incident and alerts SOC via PagerDuty."
tags:
- security
- okta
- servicenow
- pagerduty
capability:
exposes:
- type: mcp
namespace: security
port: 8080
tools:
- name: okta-suspicious-activity-to-soc-alert
description: "When Okta detects suspicious login activity, creates a ServiceNow security incident and alerts SOC via PagerDuty."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-okta
type: call
call: okta.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-okta.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_security_team_id"
channel_id: "$secrets.teams_security_channel_id"
text: "Okta Suspicious Activity to SOC Alert: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://sony.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: records
path: "/users"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Okta detects a suspicious login for a Sony employee, suspends the account, opens a ServiceNow security incident, and alerts the security operations team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Okta Suspicious Login Security Response"
description: "When Okta detects a suspicious login for a Sony employee, suspends the account, opens a ServiceNow security incident, and alerts the security operations team in Microsoft Teams."
tags:
- security
- identity
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-response
port: 8080
tools:
- name: handle-suspicious-login
description: "Given an Okta user ID and suspicious event details, suspend the account, open a ServiceNow security incident, and notify the SOC team in Teams. Use when Okta threat intelligence flags an anomalous login attempt."
inputParameters:
- name: okta_user_id
in: body
type: string
description: "The Okta user ID with the suspicious login."
- name: event_description
in: body
type: string
description: "Description of the suspicious event from Okta ThreatInsight."
steps:
- name: suspend-user
type: call
call: "okta-suspend.suspend-user"
with:
user_id: "{{okta_user_id}}"
- name: create-sec-incident
type: call
call: "servicenow-sec.create-incident"
with:
short_description: "Suspicious login: Okta user {{okta_user_id}}"
category: "security"
urgency: "high"
description: "{{event_description}}\nAccount suspended pending review."
- name: notify-soc
type: call
call: "msteams-soc.post-message"
with:
channel_id: "$secrets.security_teams_channel"
text: "Security alert: Okta account {{okta_user_id}} suspended. ServiceNow: {{create-sec-incident.number}}"
consumes:
- type: http
namespace: okta-suspend
baseUri: "https://sony.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-lifecycle
path: "/users/{{user_id}}/lifecycle/suspend"
inputParameters:
- name: user_id
in: path
operations:
- name: suspend-user
method: POST
- type: http
namespace: servicenow-sec
baseUri: "https://sony.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-soc
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: channel_id
in: path
operations:
- name: post-message
method: POST
Retrieves the current status and last login of an Okta user.
naftiko: "0.5"
info:
label: "Okta User Status Lookup"
description: "Retrieves the current status and last login of an Okta user."
tags:
- identity
- okta
- security
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-user-status
description: "Given an email, retrieve the Okta user status."
inputParameters:
- name: email
in: body
type: string
description: "Okta user email."
call: okta.get-user
with:
login: "{{email}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: okta
baseUri: "https://sony.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
inputParameters:
- name: login
in: path
operations:
- name: get-user
method: GET
At financial period close, validates that all Oracle ERP journal entries are complete for Sony's fiscal entities and posts a close status report to the controller team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Oracle ERP Financial Period Close Validation"
description: "At financial period close, validates that all Oracle ERP journal entries are complete for Sony's fiscal entities and posts a close status report to the controller team in Microsoft Teams."
tags:
- finance
- period-close
- oracle
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: period-close
port: 8080
tools:
- name: validate-period-close
description: "Given a fiscal year, period, and Sony legal entity code, query Oracle ERP for unposted journal entries and report close readiness to the controller Teams channel. Use at month-end before finalizing close."
inputParameters:
- name: fiscal_year
in: body
type: string
description: "The fiscal year (e.g., 2026)."
- name: period_name
in: body
type: string
description: "The Oracle period name (e.g., Apr-26)."
- name: ledger_id
in: body
type: string
description: "The Oracle ledger ID for the Sony legal entity."
steps:
- name: get-unposted-entries
type: call
call: "oracle-gl.get-unposted-journals"
with:
fiscal_year: "{{fiscal_year}}"
period_name: "{{period_name}}"
ledger_id: "{{ledger_id}}"
- name: post-close-status
type: call
call: "msteams-close.post-message"
with:
channel_id: "$secrets.controller_teams_channel"
text: "Period close check FY{{fiscal_year}} {{period_name}} Ledger {{ledger_id}}: {{get-unposted-entries.count}} unposted journals remaining."
consumes:
- type: http
namespace: oracle-gl
baseUri: "https://sony.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: journals
path: "/generalLedgerJournals"
inputParameters:
- name: fiscal_year
in: query
- name: period_name
in: query
- name: ledger_id
in: query
operations:
- name: get-unposted-journals
method: GET
- type: http
namespace: msteams-close
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: channel_id
in: path
operations:
- name: post-message
method: POST
Looks up an Oracle ERP purchase order by PO number and returns header status, supplier, amount, and line-item summary for finance and procurement review.
naftiko: "0.5"
info:
label: "Oracle ERP Purchase Order Lookup"
description: "Looks up an Oracle ERP purchase order by PO number and returns header status, supplier, amount, and line-item summary for finance and procurement review."
tags:
- finance
- procurement
- oracle
- erp
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given an Oracle ERP purchase order number, return the PO header status, supplier name, total amount, and currency. Use for procurement approvals and spend visibility reviews."
inputParameters:
- name: po_number
in: body
type: string
description: "The Oracle ERP purchase order number."
call: "oracle-po.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.items[0].Status"
- name: supplier
type: string
mapping: "$.items[0].SupplierName"
- name: total_amount
type: string
mapping: "$.items[0].Amount"
- name: currency
type: string
mapping: "$.items[0].CurrencyCode"
consumes:
- type: http
namespace: oracle-po
baseUri: "https://sony.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: purchase-orders
path: "/purchaseOrders"
inputParameters:
- name: po_number
in: query
operations:
- name: get-po
method: GET
Queries Oracle Hyperion for budget-vs-actual variance data for Sony divisions, identifies significant variances, and sends a variance alert report to the finance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Oracle Hyperion Budget Variance Alert"
description: "Queries Oracle Hyperion for budget-vs-actual variance data for Sony divisions, identifies significant variances, and sends a variance alert report to the finance team via Microsoft Teams."
tags:
- finance
- budgeting
- oracle
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: finance-variance
port: 8080
tools:
- name: report-budget-variance
description: "Given a Sony division code and fiscal period, query Oracle Hyperion for budget-vs-actual variance. Post a variance alert to the finance Teams channel if variance exceeds threshold. Use for monthly financial review."
inputParameters:
- name: division_code
in: body
type: string
description: "The Sony division code to analyze (e.g., SPSE for Sony Pictures, SME for Sony Music)."
- name: fiscal_period
in: body
type: string
description: "The fiscal period in YYYY-MM format."
- name: variance_threshold_pct
in: body
type: number
description: "The percentage variance threshold above which to send an alert (e.g., 10 for 10%)."
steps:
- name: get-variance
type: call
call: "oracle-hyperion.get-budget-variance"
with:
division_code: "{{division_code}}"
fiscal_period: "{{fiscal_period}}"
- name: post-variance-alert
type: call
call: "msteams-budget.post-message"
with:
channel_id: "$secrets.finance_teams_channel"
text: "Budget variance alert for {{division_code}} in {{fiscal_period}}: {{get-variance.variancePct}}% vs threshold {{variance_threshold_pct}}%"
consumes:
- type: http
namespace: oracle-hyperion
baseUri: "https://sony-hyperion.fa.us2.oraclecloud.com/HyperionPlanning/rest/v3"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: budget-variance
path: "/applications/{{app}}/plantypes/{{plan_type}}/forms/{{form_id}}"
inputParameters:
- name: division_code
in: query
- name: fiscal_period
in: query
operations:
- name: get-budget-variance
method: GET
- type: http
namespace: msteams-budget
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: channel_id
in: path
operations:
- name: post-message
method: POST
When PagerDuty creates a major incident, posts a status update to Confluence and creates a timeline page.
naftiko: "0.5"
info:
label: "PagerDuty Incident to Statuspage Update"
description: "When PagerDuty creates a major incident, posts a status update to Confluence and creates a timeline page."
tags:
- incident-management
- pagerduty
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-management
port: 8080
tools:
- name: pagerduty-incident-to-statuspage-update
description: "When PagerDuty creates a major incident, posts a status update to Confluence and creates a timeline page."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-pagerduty
type: call
call: pagerduty.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-confluence
type: call
call: confluence.create-record
with:
reference: "{{process-pagerduty.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_incident_management_team_id"
channel_id: "$secrets.teams_incident_management_channel_id"
text: "PagerDuty Incident to Statuspage Update: {{source_id}} | {{summary}} | Ref: {{create-confluence.id}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: records
path: "/incidents"
operations:
- name: process-record
method: POST
- type: http
namespace: confluence
baseUri: "https://sony.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: records
path: "/content"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves the current on-call engineer for a PagerDuty escalation policy.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Lookup"
description: "Retrieves the current on-call engineer for a PagerDuty escalation policy."
tags:
- incident-management
- pagerduty
- on-call
capability:
exposes:
- type: mcp
namespace: incident-management
port: 8080
tools:
- name: get-on-call-engineer
description: "Given a PagerDuty escalation policy ID, return the on-call engineer."
inputParameters:
- name: policy_id
in: body
type: string
description: "PagerDuty escalation policy ID."
call: pagerduty.get-on-calls
with:
escalation_policy_ids: "{{policy_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
inputParameters:
- name: escalation_policy_ids
in: query
operations:
- name: get-on-calls
method: GET
When a Datadog monitor detects a PSN service degradation, opens a PagerDuty incident, creates a Jira P1 bug for the platform team, and posts a status alert to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "PlayStation Network Incident Response"
description: "When a Datadog monitor detects a PSN service degradation, opens a PagerDuty incident, creates a Jira P1 bug for the platform team, and posts a status alert to the engineering Microsoft Teams channel."
tags:
- gaming
- incident-response
- datadog
- pagerduty
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: psn-ops
port: 8080
tools:
- name: handle-psn-service-degradation
description: "Given a Datadog monitor ID and service name, trigger a PagerDuty incident, create a Jira P1 bug, and alert the engineering channel in Teams. Use when PSN core services show degradation or outage signals."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that fired the alert."
- name: service_name
in: body
type: string
description: "The PSN service name experiencing degradation (e.g., psn-auth, psn-store)."
- name: severity
in: body
type: string
description: "Incident severity: P1, P2, or P3."
steps:
- name: get-monitor-status
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: trigger-page
type: call
call: "pagerduty.create-incident"
with:
service_id: "$secrets.pagerduty_psn_service_id"
summary: "{{severity}} PSN service degradation: {{service_name}}"
severity: "critical"
- name: create-bug
type: call
call: "jira.create-issue"
with:
project_key: "PSN"
issuetype: "Bug"
summary: "[{{severity}}] Service degradation: {{service_name}}"
description: "Monitor: {{monitor_id}}\nState: {{get-monitor-status.overall_state}}\nPagerDuty: {{trigger-page.incidentId}}"
- name: post-alert
type: call
call: "msteams-eng.post-message"
with:
channel_id: "$secrets.engineering_teams_channel"
text: "{{severity}} PSN Incident: {{service_name}} | PagerDuty: {{trigger-page.incidentId}} | Jira: {{create-bug.key}}"
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: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_api_key"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://sony.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: 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: channel_id
in: path
operations:
- name: post-message
method: POST
Checks the last refresh status of a Power BI dataset.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status"
description: "Checks the last refresh status of a Power BI dataset."
tags:
- analytics
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-refresh-status
description: "Given a Power BI dataset ID, return the refresh status."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID."
call: powerbi.get-refresh-history
with:
datasetId: "{{dataset_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.example.com/v1"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets"
inputParameters:
- name: datasetId
in: path
operations:
- name: get-refresh-history
method: GET
Triggers a Power BI dataset refresh for the Sony Entertainment revenue dashboard and notifies the finance team in Teams when the refresh completes.
naftiko: "0.5"
info:
label: "Power BI Entertainment Revenue Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the Sony Entertainment revenue dashboard and notifies the finance team in Teams when the refresh completes."
tags:
- finance
- analytics
- power-bi
- microsoft-teams
- reporting
- entertainment
capability:
exposes:
- type: mcp
namespace: entertainment-reporting
port: 8080
tools:
- name: refresh-revenue-dashboard
description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh for the Sony Entertainment revenue dashboard and notify the finance team in Teams. Use at period close or on demand before executive reviews."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID containing the entertainment revenue dataset."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: "msteams-report.post-message"
with:
channel_id: "$secrets.finance_teams_channel"
text: "Entertainment revenue dashboard refresh triggered. Dataset: {{dataset_id}} in workspace {{workspace_id}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams-report
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: channel_id
in: path
operations:
- name: post-message
method: POST
When a Power BI refresh fails, creates a Jira ticket and posts error details to the analytics Teams channel.
naftiko: "0.5"
info:
label: "Power BI Report Failure to Jira Ticket"
description: "When a Power BI refresh fails, creates a Jira ticket and posts error details to the analytics Teams channel."
tags:
- analytics
- power-bi
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: power-bi-report-failure-to-jira-ticket
description: "When a Power BI refresh fails, creates a Jira ticket and posts error details to the analytics Teams channel."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-powerbi
type: call
call: powerbi.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-powerbi.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_analytics_team_id"
channel_id: "$secrets.teams_analytics_channel_id"
text: "Power BI Report Failure to Jira Ticket: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: records
path: "/datasets"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Escalates a high-severity Salesforce case by creating a GitHub issue and paging engineering on-call via PagerDuty.
naftiko: "0.5"
info:
label: "Salesforce Case Escalation to Engineering"
description: "Escalates a high-severity Salesforce case by creating a GitHub issue and paging engineering on-call via PagerDuty."
tags:
- support
- salesforce
- github
- pagerduty
capability:
exposes:
- type: mcp
namespace: support
port: 8080
tools:
- name: salesforce-case-escalation-to-engineering
description: "Escalates a high-severity Salesforce case by creating a GitHub issue and paging engineering on-call via PagerDuty."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-salesforce
type: call
call: salesforce.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-github
type: call
call: github.create-record
with:
reference: "{{process-salesforce.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_support_team_id"
channel_id: "$secrets.teams_support_channel_id"
text: "Salesforce Case Escalation to Engineering: {{source_id}} | {{summary}} | Ref: {{create-github.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: process-record
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: records
path: "/repos"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Salesforce predicts churn risk, creates a CS Jira task and logs the intervention.
naftiko: "0.5"
info:
label: "Salesforce Churn Signal to Retention Workflow"
description: "When Salesforce predicts churn risk, creates a CS Jira task and logs the intervention."
tags:
- crm
- salesforce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: salesforce-churn-signal-to-retention-workflow
description: "When Salesforce predicts churn risk, creates a CS Jira task and logs the intervention."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-salesforce
type: call
call: salesforce.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-salesforce.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_crm_team_id"
channel_id: "$secrets.teams_crm_channel_id"
text: "Salesforce Churn Signal to Retention Workflow: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a Salesforce contact by email address with account association.
naftiko: "0.5"
info:
label: "Salesforce Contact Lookup"
description: "Retrieves a Salesforce contact by email address with account association."
tags:
- crm
- salesforce
- contacts
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-contact-by-email
description: "Given an email, retrieve the matching Salesforce contact."
inputParameters:
- name: email
in: body
type: string
description: "Contact email address."
call: salesforce.query-contacts
with:
q: "{{email}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-contacts
method: GET
Syncs closed-won Salesforce opportunities for Sony Pictures and Sony Music content licensing deals to Oracle ERP for contract and revenue management.
naftiko: "0.5"
info:
label: "Salesforce Entertainment Account Opportunity Sync"
description: "Syncs closed-won Salesforce opportunities for Sony Pictures and Sony Music content licensing deals to Oracle ERP for contract and revenue management."
tags:
- sales
- entertainment
- salesforce
- oracle
- crm
capability:
exposes:
- type: mcp
namespace: entertainment-sales
port: 8080
tools:
- name: sync-opportunity-to-oracle
description: "Given a Salesforce opportunity ID for a closed content licensing deal, retrieve deal details and create a revenue contract record in Oracle ERP. Use when licensing deals close in Salesforce CRM."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID (18-character Salesforce ID)."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: create-contract
type: call
call: "oracle-erp.create-contract"
with:
contract_name: "{{get-opportunity.Name}}"
amount: "{{get-opportunity.Amount}}"
close_date: "{{get-opportunity.CloseDate}}"
account_name: "{{get-opportunity.AccountName}}"
- name: notify-finance
type: call
call: "msteams-fin.post-message"
with:
channel_id: "$secrets.finance_teams_channel"
text: "Contract created in Oracle for {{get-opportunity.Name}}. Oracle ID: {{create-contract.contractId}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: oracle-erp
baseUri: "https://sony.fa.us2.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: contracts
path: "/contracts"
operations:
- name: create-contract
method: POST
- type: http
namespace: msteams-fin
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: channel_id
in: path
operations:
- name: post-message
method: POST
When a new lead is created in Salesforce for Sony B2B sales, enriches the record with company firmographic data from ZoomInfo and updates lead scoring fields.
naftiko: "0.5"
info:
label: "Salesforce Lead Enrichment with ZoomInfo"
description: "When a new lead is created in Salesforce for Sony B2B sales, enriches the record with company firmographic data from ZoomInfo and updates lead scoring fields."
tags:
- sales
- crm
- salesforce
- zoominfo
- lead-enrichment
capability:
exposes:
- type: mcp
namespace: lead-enrichment
port: 8080
tools:
- name: enrich-salesforce-lead
description: "Given a Salesforce lead ID, retrieve the lead's company info, look up firmographic data in ZoomInfo, and update the Salesforce record with employee count, revenue, and industry. Use when B2B leads are created from campaigns."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead ID (18-character Salesforce ID)."
steps:
- name: get-lead
type: call
call: "salesforce-lead.get-lead"
with:
lead_id: "{{lead_id}}"
- name: enrich-company
type: call
call: "zoominfo.search-company"
with:
company_name: "{{get-lead.Company}}"
- name: update-lead
type: call
call: "salesforce-lead-update.update-lead"
with:
lead_id: "{{lead_id}}"
employee_count: "{{enrich-company.employeeCount}}"
industry: "{{enrich-company.industry}}"
revenue: "{{enrich-company.revenue}}"
consumes:
- type: http
namespace: salesforce-lead
baseUri: "https://sony.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
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company"
operations:
- name: search-company
method: POST
- type: http
namespace: salesforce-lead-update
baseUri: "https://sony.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: update-lead
method: PATCH
When a high-value Salesforce lead submits a feature request, creates a Jira ticket and notifies the product team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Lead to Jira Feature Request"
description: "When a high-value Salesforce lead submits a feature request, creates a Jira ticket and notifies the product team in Microsoft Teams."
tags:
- crm
- salesforce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: salesforce-lead-to-jira-feature-request
description: "When a high-value Salesforce lead submits a feature request, creates a Jira ticket and notifies the product team in Microsoft Teams."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-salesforce
type: call
call: salesforce.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-salesforce.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_crm_team_id"
channel_id: "$secrets.teams_crm_channel_id"
text: "Salesforce Lead to Jira Feature Request: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a Salesforce CPQ quote is approved, sends it for signature and updates Salesforce.
naftiko: "0.5"
info:
label: "Salesforce Quote Approval to Contract Send"
description: "When a Salesforce CPQ quote is approved, sends it for signature and updates Salesforce."
tags:
- quote-to-cash
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quote-to-cash
port: 8080
tools:
- name: salesforce-quote-approval-to-contract-send
description: "When a Salesforce CPQ quote is approved, sends it for signature and updates Salesforce."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-salesforce
type: call
call: salesforce.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-msteams
type: call
call: msteams.create-record
with:
reference: "{{process-salesforce.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_quote_to_cash_team_id"
channel_id: "$secrets.teams_quote_to_cash_channel_id"
text: "Salesforce Quote Approval to Contract Send: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: process-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: records
path: "/teams"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a Salesforce opportunity shows renewal risk, creates a Jira CS task and alerts the account team.
naftiko: "0.5"
info:
label: "Salesforce Renewal Risk to Customer Success"
description: "When a Salesforce opportunity shows renewal risk, creates a Jira CS task and alerts the account team."
tags:
- crm
- salesforce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: salesforce-renewal-risk-to-customer-success
description: "When a Salesforce opportunity shows renewal risk, creates a Jira CS task and alerts the account team."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-salesforce
type: call
call: salesforce.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-salesforce.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_crm_team_id"
channel_id: "$secrets.teams_crm_channel_id"
text: "Salesforce Renewal Risk to Customer Success: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a territory assignment changes, updates lead routing and notifies affected reps.
naftiko: "0.5"
info:
label: "Salesforce Territory Change to Routing Update"
description: "When a territory assignment changes, updates lead routing and notifies affected reps."
tags:
- crm
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: salesforce-territory-change-to-routing-update
description: "When a territory assignment changes, updates lead routing and notifies affected reps."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-salesforce
type: call
call: salesforce.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-msteams
type: call
call: msteams.create-record
with:
reference: "{{process-salesforce.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_crm_team_id"
channel_id: "$secrets.teams_crm_channel_id"
text: "Salesforce Territory Change to Routing Update: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: process-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: records
path: "/teams"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a Salesforce opportunity is Closed Won, creates a SAP sales order and confirms in Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce Win to SAP Sales Order Creation"
description: "When a Salesforce opportunity is Closed Won, creates a SAP sales order and confirms in Microsoft Teams."
tags:
- order-management
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: order-management
port: 8080
tools:
- name: salesforce-win-to-sap-sales-order-creation
description: "When a Salesforce opportunity is Closed Won, creates a SAP sales order and confirms in Microsoft Teams."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-salesforce
type: call
call: salesforce.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-sap
type: call
call: sap.create-record
with:
reference: "{{process-salesforce.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_order_management_team_id"
channel_id: "$secrets.teams_order_management_channel_id"
text: "Salesforce Win to SAP Sales Order Creation: {{source_id}} | {{summary}} | Ref: {{create-sap.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: process-record
method: POST
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/A_BusinessPartner"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a contract summary from SAP Ariba by contract ID.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Lookup"
description: "Retrieves a contract summary from SAP Ariba by contract ID."
tags:
- procurement
- sap-ariba
- contracts
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-contract-summary
description: "Given a SAP Ariba contract ID, return the status."
inputParameters:
- name: contract_id
in: body
type: string
description: "SAP Ariba contract ID."
call: ariba.get-contract
with:
contractId: "{{contract_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: ariba
baseUri: "https://api.example.com/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: contracts
path: "/contracts"
inputParameters:
- name: contractId
in: path
operations:
- name: get-contract
method: GET
Retrieves an expense report summary from SAP Concur by report ID.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Lookup"
description: "Retrieves an expense report summary from SAP Concur by report ID."
tags:
- finance
- sap-concur
- expense-management
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: get-expense-report
description: "Given a Concur report ID, return the summary."
inputParameters:
- name: report_id
in: body
type: string
description: "SAP Concur expense report ID."
call: concur.get-report
with:
id: "{{report_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: concur
baseUri: "https://api.example.com/v1"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports"
inputParameters:
- name: id
in: path
operations:
- name: get-report
method: GET
When an SAP Ariba contract approaches expiration, creates a Salesforce renewal opportunity.
naftiko: "0.5"
info:
label: "SAP Contract Expiry to Renewal Workflow"
description: "When an SAP Ariba contract approaches expiration, creates a Salesforce renewal opportunity."
tags:
- procurement
- sap-ariba
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: sap-contract-expiry-to-renewal-workflow
description: "When an SAP Ariba contract approaches expiration, creates a Salesforce renewal opportunity."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-ariba
type: call
call: ariba.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-salesforce
type: call
call: salesforce.create-record
with:
reference: "{{process-ariba.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_procurement_team_id"
channel_id: "$secrets.teams_procurement_channel_id"
text: "SAP Contract Expiry to Renewal Workflow: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: records
path: "/requisitions"
operations:
- name: process-record
method: POST
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a delivery is confirmed in SAP, updates the Salesforce order and notifies customer success.
naftiko: "0.5"
info:
label: "SAP Delivery Confirmation to Salesforce Update"
description: "When a delivery is confirmed in SAP, updates the Salesforce order and notifies customer success."
tags:
- logistics
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: logistics
port: 8080
tools:
- name: sap-delivery-confirmation-to-salesforce-update
description: "When a delivery is confirmed in SAP, updates the Salesforce order and notifies customer success."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-sap
type: call
call: sap.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-salesforce
type: call
call: salesforce.create-record
with:
reference: "{{process-sap.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_logistics_team_id"
channel_id: "$secrets.teams_logistics_channel_id"
text: "SAP Delivery Confirmation to Salesforce Update: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/A_BusinessPartner"
operations:
- name: process-record
method: POST
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a goods receipt is posted in SAP, matches it against pending invoices and notifies accounts payable in Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Goods Receipt to Invoice Match"
description: "When a goods receipt is posted in SAP, matches it against pending invoices and notifies accounts payable in Microsoft Teams."
tags:
- procurement
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: sap-goods-receipt-to-invoice-match
description: "When a goods receipt is posted in SAP, matches it against pending invoices and notifies accounts payable in Microsoft Teams."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-sap
type: call
call: sap.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-msteams
type: call
call: msteams.create-record
with:
reference: "{{process-sap.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_procurement_team_id"
channel_id: "$secrets.teams_procurement_channel_id"
text: "SAP Goods Receipt to Invoice Match: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/A_BusinessPartner"
operations:
- name: process-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: records
path: "/teams"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When SAP inventory falls below reorder point, creates an Ariba purchase requisition and notifies procurement.
naftiko: "0.5"
info:
label: "SAP Inventory Alert to Procurement Request"
description: "When SAP inventory falls below reorder point, creates an Ariba purchase requisition and notifies procurement."
tags:
- supply-chain
- sap
- sap-ariba
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: supply-chain
port: 8080
tools:
- name: sap-inventory-alert-to-procurement-request
description: "When SAP inventory falls below reorder point, creates an Ariba purchase requisition and notifies procurement."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-sap
type: call
call: sap.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-ariba
type: call
call: ariba.create-record
with:
reference: "{{process-sap.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_supply_chain_team_id"
channel_id: "$secrets.teams_supply_chain_channel_id"
text: "SAP Inventory Alert to Procurement Request: {{source_id}} | {{summary}} | Ref: {{create-ariba.id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/A_BusinessPartner"
operations:
- name: process-record
method: POST
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: records
path: "/requisitions"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves material master data from SAP by material number.
naftiko: "0.5"
info:
label: "SAP Material Master Lookup"
description: "Retrieves material master data from SAP by material number."
tags:
- erp
- sap
- materials
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-material-master
description: "Given a SAP material number, retrieve the material description."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number."
call: sap.get-material
with:
Material: "{{material_number}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: products
path: "/A_Product"
inputParameters:
- name: Material
in: path
operations:
- name: get-material
method: GET
When an SAP payment run completes, notifies vendor management and updates Salesforce records.
naftiko: "0.5"
info:
label: "SAP Payment Run to Vendor Notification"
description: "When an SAP payment run completes, notifies vendor management and updates Salesforce records."
tags:
- finance
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: sap-payment-run-to-vendor-notification
description: "When an SAP payment run completes, notifies vendor management and updates Salesforce records."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-sap
type: call
call: sap.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-salesforce
type: call
call: salesforce.create-record
with:
reference: "{{process-sap.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_finance_team_id"
channel_id: "$secrets.teams_finance_channel_id"
text: "SAP Payment Run to Vendor Notification: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/A_BusinessPartner"
operations:
- name: process-record
method: POST
- type: http
namespace: salesforce
baseUri: "https://sony.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a purchase order is approved in SAP, syncs the PO to Ariba and posts confirmation to the procurement Teams channel.
naftiko: "0.5"
info:
label: "SAP Purchase Order Approval to Ariba Sync"
description: "When a purchase order is approved in SAP, syncs the PO to Ariba and posts confirmation to the procurement Teams channel."
tags:
- procurement
- sap
- sap-ariba
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: sap-purchase-order-approval-to-ariba-sync
description: "When a purchase order is approved in SAP, syncs the PO to Ariba and posts confirmation to the procurement Teams channel."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-sap
type: call
call: sap.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-ariba
type: call
call: ariba.create-record
with:
reference: "{{process-sap.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_procurement_team_id"
channel_id: "$secrets.teams_procurement_channel_id"
text: "SAP Purchase Order Approval to Ariba Sync: {{source_id}} | {{summary}} | Ref: {{create-ariba.id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/A_BusinessPartner"
operations:
- name: process-record
method: POST
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: records
path: "/requisitions"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a quality inspection places goods on hold, creates a Jira quality issue and notifies procurement.
naftiko: "0.5"
info:
label: "SAP Quality Hold to Supplier Notification"
description: "When a quality inspection places goods on hold, creates a Jira quality issue and notifies procurement."
tags:
- quality
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality
port: 8080
tools:
- name: sap-quality-hold-to-supplier-notification
description: "When a quality inspection places goods on hold, creates a Jira quality issue and notifies procurement."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-sap
type: call
call: sap.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-sap.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_quality_team_id"
channel_id: "$secrets.teams_quality_channel_id"
text: "SAP Quality Hold to Supplier Notification: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: records
path: "/A_BusinessPartner"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves vendor master data from SAP by vendor ID.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP by vendor ID."
tags:
- erp
- sap
- vendor-management
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-vendor-master
description: "Given a SAP vendor ID, retrieve the vendor name."
inputParameters:
- name: vendor_id
in: body
type: string
description: "SAP vendor master ID."
call: sap.get-vendor
with:
Supplier: "{{vendor_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: sap
baseUri: "https://sony-erp.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: suppliers
path: "/A_Supplier"
inputParameters:
- name: Supplier
in: path
operations:
- name: get-vendor
method: GET
When a ServiceNow asset reaches end-of-life, creates an Ariba requisition and notifies IT asset management.
naftiko: "0.5"
info:
label: "ServiceNow Asset Refresh to Procurement"
description: "When a ServiceNow asset reaches end-of-life, creates an Ariba requisition and notifies IT asset management."
tags:
- asset-management
- servicenow
- sap-ariba
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: asset-management
port: 8080
tools:
- name: servicenow-asset-refresh-to-procurement
description: "When a ServiceNow asset reaches end-of-life, creates an Ariba requisition and notifies IT asset management."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-servicenow
type: call
call: servicenow.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-ariba
type: call
call: ariba.create-record
with:
reference: "{{process-servicenow.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_asset_management_team_id"
channel_id: "$secrets.teams_asset_management_channel_id"
text: "ServiceNow Asset Refresh to Procurement: {{source_id}} | {{summary}} | Ref: {{create-ariba.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: process-record
method: POST
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/procurement/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: records
path: "/requisitions"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a ServiceNow change is approved, triggers a GitHub deployment and updates the change with status.
naftiko: "0.5"
info:
label: "ServiceNow Change to GitHub Deployment"
description: "When a ServiceNow change is approved, triggers a GitHub deployment and updates the change with status."
tags:
- itsm
- servicenow
- github
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: servicenow-change-to-github-deployment
description: "When a ServiceNow change is approved, triggers a GitHub deployment and updates the change with status."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-servicenow
type: call
call: servicenow.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-github
type: call
call: github.create-record
with:
reference: "{{process-servicenow.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_itsm_team_id"
channel_id: "$secrets.teams_itsm_channel_id"
text: "ServiceNow Change to GitHub Deployment: {{source_id}} | {{summary}} | Ref: {{create-github.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: process-record
method: POST
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: records
path: "/repos"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves the priority and assignment group for a ServiceNow incident by number.
naftiko: "0.5"
info:
label: "ServiceNow Incident Priority Lookup"
description: "Retrieves the priority and assignment group for a ServiceNow incident by number."
tags:
- itsm
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident-priority
description: "Given a ServiceNow incident number, return the priority and assigned group."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number."
call: servicenow.get-incident
with:
number: "{{incident_number}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
Creates a ServiceNow change request for planned PlayStation or Sony infrastructure changes, routes it for CAB approval, and notifies stakeholders in Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow IT Change Request Workflow"
description: "Creates a ServiceNow change request for planned PlayStation or Sony infrastructure changes, routes it for CAB approval, and notifies stakeholders in Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: create-change-request
description: "Given a change summary, risk level, and assignment group, create a ServiceNow change request and notify the change advisory board in Teams. Use to initiate controlled infrastructure changes for PlayStation or Sony IT systems."
inputParameters:
- name: short_description
in: body
type: string
description: "Brief description of the planned infrastructure change."
- name: risk
in: body
type: string
description: "Risk level: low, medium, or high."
- name: assignment_group
in: body
type: string
description: "The ServiceNow group responsible for implementing the change."
steps:
- name: create-cr
type: call
call: "servicenow-cr.create-change"
with:
short_description: "{{short_description}}"
risk: "{{risk}}"
assignment_group: "{{assignment_group}}"
- name: notify-cab
type: call
call: "msteams-cab.post-message"
with:
channel_id: "$secrets.cab_teams_channel"
text: "Change request {{create-cr.number}} submitted. Risk: {{risk}}. {{short_description}}"
consumes:
- type: http
namespace: servicenow-cr
baseUri: "https://sony.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
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: channel_id
in: path
operations:
- name: post-message
method: POST
When a ServiceNow P1 incident is created, schedules a Teams bridge and pages the incident commander via PagerDuty.
naftiko: "0.5"
info:
label: "ServiceNow Major Incident Bridge Setup"
description: "When a ServiceNow P1 incident is created, schedules a Teams bridge and pages the incident commander via PagerDuty."
tags:
- itsm
- servicenow
- microsoft-teams
- pagerduty
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: servicenow-major-incident-bridge-setup
description: "When a ServiceNow P1 incident is created, schedules a Teams bridge and pages the incident commander via PagerDuty."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-servicenow
type: call
call: servicenow.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-msteams
type: call
call: msteams.create-record
with:
reference: "{{process-servicenow.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_itsm_team_id"
channel_id: "$secrets.teams_itsm_channel_id"
text: "ServiceNow Major Incident Bridge Setup: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: process-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: records
path: "/teams"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a ServiceNow problem is resolved, creates a Confluence KB article and updates the KEDB.
naftiko: "0.5"
info:
label: "ServiceNow Problem to Known Error KB"
description: "When a ServiceNow problem is resolved, creates a Confluence KB article and updates the KEDB."
tags:
- itsm
- servicenow
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: servicenow-problem-to-known-error-kb
description: "When a ServiceNow problem is resolved, creates a Confluence KB article and updates the KEDB."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-servicenow
type: call
call: servicenow.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-confluence
type: call
call: confluence.create-record
with:
reference: "{{process-servicenow.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_itsm_team_id"
channel_id: "$secrets.teams_itsm_channel_id"
text: "ServiceNow Problem to Known Error KB: {{source_id}} | {{summary}} | Ref: {{create-confluence.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: process-record
method: POST
- type: http
namespace: confluence
baseUri: "https://sony.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: records
path: "/content"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Snowflake credit consumption spikes, creates a Jira investigation ticket and alerts the FinOps team.
naftiko: "0.5"
info:
label: "Snowflake Cost Spike to FinOps Alert"
description: "When Snowflake credit consumption spikes, creates a Jira investigation ticket and alerts the FinOps team."
tags:
- finops
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: snowflake-cost-spike-to-finops-alert
description: "When Snowflake credit consumption spikes, creates a Jira investigation ticket and alerts the FinOps team."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-snowflake
type: call
call: snowflake.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-snowflake.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_finops_team_id"
channel_id: "$secrets.teams_finops_channel_id"
text: "Snowflake Cost Spike to FinOps Alert: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://sony.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: records
path: "/statements"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a Snowflake ETL pipeline fails, creates a Jira bug and triggers a PagerDuty incident for data engineering.
naftiko: "0.5"
info:
label: "Snowflake ETL Failure to PagerDuty Escalation"
description: "When a Snowflake ETL pipeline fails, creates a Jira bug and triggers a PagerDuty incident for data engineering."
tags:
- data-engineering
- snowflake
- jira
- pagerduty
capability:
exposes:
- type: mcp
namespace: data-engineering
port: 8080
tools:
- name: snowflake-etl-failure-to-pagerduty-escalation
description: "When a Snowflake ETL pipeline fails, creates a Jira bug and triggers a PagerDuty incident for data engineering."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-snowflake
type: call
call: snowflake.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-snowflake.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_data_engineering_team_id"
channel_id: "$secrets.teams_data_engineering_channel_id"
text: "Snowflake ETL Failure to PagerDuty Escalation: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://sony.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: records
path: "/statements"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Monitors Sony Pictures and Sony Music streaming analytics pipelines in Snowflake, detects stalled or failed jobs, and opens a Jira data engineering ticket for triage.
naftiko: "0.5"
info:
label: "Snowflake Media Analytics Pipeline Monitor"
description: "Monitors Sony Pictures and Sony Music streaming analytics pipelines in Snowflake, detects stalled or failed jobs, and opens a Jira data engineering ticket for triage."
tags:
- data
- analytics
- snowflake
- jira
- entertainment
- monitoring
capability:
exposes:
- type: mcp
namespace: media-analytics-ops
port: 8080
tools:
- name: monitor-streaming-analytics
description: "Check Snowflake task history for failed streaming analytics jobs in a given database. Open a Jira ticket if critical failures are detected. Use for daily monitoring of media analytics pipelines."
inputParameters:
- name: database
in: body
type: string
description: "The Snowflake database containing streaming analytics tasks (e.g., SONY_MEDIA_ANALYTICS)."
- name: lookback_hours
in: body
type: integer
description: "Number of hours to look back for task failures."
steps:
- name: check-tasks
type: call
call: "snowflake.get-task-history"
with:
database: "{{database}}"
lookback_hours: "{{lookback_hours}}"
- name: create-ticket
type: call
call: "jira-data.create-issue"
with:
project_key: "DATA"
issuetype: "Bug"
summary: "Snowflake pipeline failure in {{database}}"
description: "Failed tasks detected over last {{lookback_hours}} hours in {{database}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://sony.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/{{database}}/schemas/INFORMATION_SCHEMA/task-history"
inputParameters:
- name: database
in: path
operations:
- name: get-task-history
method: GET
- type: http
namespace: jira-data
baseUri: "https://sony.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
When a Snowflake schema change is detected, creates a Jira governance review and notifies data stewards.
naftiko: "0.5"
info:
label: "Snowflake Schema Drift to Data Governance"
description: "When a Snowflake schema change is detected, creates a Jira governance review and notifies data stewards."
tags:
- data-governance
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-governance
port: 8080
tools:
- name: snowflake-schema-drift-to-data-governance
description: "When a Snowflake schema change is detected, creates a Jira governance review and notifies data stewards."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-snowflake
type: call
call: snowflake.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-jira
type: call
call: jira.create-record
with:
reference: "{{process-snowflake.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_data_governance_team_id"
channel_id: "$secrets.teams_data_governance_channel_id"
text: "Snowflake Schema Drift to Data Governance: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://sony.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: records
path: "/statements"
operations:
- name: process-record
method: POST
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: records
path: "/issue"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Executes a count query against a Snowflake table and returns the row count.
naftiko: "0.5"
info:
label: "Snowflake Table Row Count"
description: "Executes a count query against a Snowflake table and returns the row count."
tags:
- data
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: data
port: 8080
tools:
- name: get-table-row-count
description: "Given a Snowflake table name, return the total row count."
inputParameters:
- name: table_name
in: body
type: string
description: "Fully qualified Snowflake table name."
call: snowflake.execute-query
with:
statement: "{{table_name}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: snowflake
baseUri: "https://sony.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
inputParameters:
- name: statement
in: query
operations:
- name: execute-query
method: GET
When Terraform Cloud detects infrastructure drift, creates a Jira remediation ticket and notifies the platform engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Terraform Cloud Drift Detection"
description: "When Terraform Cloud detects infrastructure drift, creates a Jira remediation ticket and notifies the platform engineering team in Microsoft Teams."
tags:
- infrastructure
- terraform
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infrastructure
port: 8080
tools:
- name: handle-drift-detection
description: "Given a Terraform workspace with drift, create a remediation ticket and notify the platform team."
inputParameters:
- name: workspace_name
in: body
type: string
description: "Terraform Cloud workspace name."
- name: drift_summary
in: body
type: string
description: "Summary of detected drift."
- name: resource_count
in: body
type: integer
description: "Number of drifted resources."
steps:
- name: create-ticket
type: call
call: jira.create-issue
with:
project_key: PLATFORM
issuetype: Bug
summary: "Terraform Drift: {{workspace_name}} ({{resource_count}} resources)"
description: "{{drift_summary}}"
- name: notify-platform
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_platform_team_id"
channel_id: "$secrets.teams_platform_channel_id"
text: "Terraform Drift: {{workspace_name}} | {{resource_count}} resources | Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://sony.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a compensation change is finalized in Workday, syncs to payroll and confirms with HRBP.
naftiko: "0.5"
info:
label: "Workday Compensation Change to Payroll Sync"
description: "When a compensation change is finalized in Workday, syncs to payroll and confirms with HRBP."
tags:
- hr
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: workday-compensation-change-to-payroll-sync
description: "When a compensation change is finalized in Workday, syncs to payroll and confirms with HRBP."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-workday
type: call
call: workday.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-msteams
type: call
call: msteams.create-record
with:
reference: "{{process-workday.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_hr_team_id"
channel_id: "$secrets.teams_hr_channel_id"
text: "Workday Compensation Change to Payroll Sync: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://sony.workday.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: records
path: "/workers"
operations:
- name: process-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: records
path: "/teams"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves an employee profile from Workday by employee ID.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by employee ID."
tags:
- hr
- workday
- employee-data
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee-profile
description: "Given a Workday employee ID, return the employee name and title."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: workday
baseUri: "https://sony.workday.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
When headcount changes are approved, updates the Snowflake model and refreshes the Power BI dashboard.
naftiko: "0.5"
info:
label: "Workday Headcount Change to Finance Forecast"
description: "When headcount changes are approved, updates the Snowflake model and refreshes the Power BI dashboard."
tags:
- finance
- workday
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: finance
port: 8080
tools:
- name: workday-headcount-change-to-finance-forecast
description: "When headcount changes are approved, updates the Snowflake model and refreshes the Power BI dashboard."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-workday
type: call
call: workday.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-snowflake
type: call
call: snowflake.create-record
with:
reference: "{{process-workday.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_finance_team_id"
channel_id: "$secrets.teams_finance_channel_id"
text: "Workday Headcount Change to Finance Forecast: {{source_id}} | {{summary}} | Ref: {{create-snowflake.id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://sony.workday.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: records
path: "/workers"
operations:
- name: process-record
method: POST
- type: http
namespace: snowflake
baseUri: "https://sony.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: records
path: "/statements"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves current headcount by department and cost center from Workday and publishes a structured snapshot to the finance team's Teams channel for workforce planning.
naftiko: "0.5"
info:
label: "Workday Headcount Snapshot for Finance"
description: "Retrieves current headcount by department and cost center from Workday and publishes a structured snapshot to the finance team's Teams channel for workforce planning."
tags:
- hr
- finance
- workday
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-analytics
port: 8080
tools:
- name: get-headcount-snapshot
description: "Return current headcount grouped by department and cost center from Workday. Post the summary to the finance Teams channel. Use for quarterly workforce planning and budget reviews."
inputParameters:
- name: company_code
in: body
type: string
description: "The Workday company code to filter headcount by."
steps:
- name: get-headcount
type: call
call: "workday-hc.get-workers"
with:
company_code: "{{company_code}}"
- name: post-snapshot
type: call
call: "msteams-hc.post-message"
with:
channel_id: "$secrets.finance_teams_channel"
text: "Headcount snapshot for {{company_code}}: {{get-headcount.totalCount}} active employees across {{get-headcount.departmentCount}} 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: workers
path: "/workers"
inputParameters:
- name: company_code
in: query
operations:
- name: get-workers
method: GET
- type: http
namespace: msteams-hc
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: channel_id
in: path
operations:
- name: post-message
method: POST
When a Workday leave request is approved, notifies the manager and blocks the calendar.
naftiko: "0.5"
info:
label: "Workday Leave Request to Calendar Block"
description: "When a Workday leave request is approved, notifies the manager and blocks the calendar."
tags:
- hr
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: workday-leave-request-to-calendar-block
description: "When a Workday leave request is approved, notifies the manager and blocks the calendar."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-workday
type: call
call: workday.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-msteams
type: call
call: msteams.create-record
with:
reference: "{{process-workday.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_hr_team_id"
channel_id: "$secrets.teams_hr_channel_id"
text: "Workday Leave Request to Calendar Block: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://sony.workday.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: records
path: "/workers"
operations:
- name: process-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: records
path: "/teams"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a new hire is confirmed in Workday, creates a ServiceNow equipment request for laptop provisioning.
naftiko: "0.5"
info:
label: "Workday New Hire to Equipment Request"
description: "When a new hire is confirmed in Workday, creates a ServiceNow equipment request for laptop provisioning."
tags:
- hr
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: workday-new-hire-to-equipment-request
description: "When a new hire is confirmed in Workday, creates a ServiceNow equipment request for laptop provisioning."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-workday
type: call
call: workday.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-servicenow
type: call
call: servicenow.create-record
with:
reference: "{{process-workday.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_hr_team_id"
channel_id: "$secrets.teams_hr_channel_id"
text: "Workday New Hire to Equipment Request: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://sony.workday.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: records
path: "/workers"
operations:
- name: process-record
method: POST
- type: http
namespace: servicenow
baseUri: "https://sony.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When an employee termination is processed in Workday, disables the Microsoft 365 account, resolves open ServiceNow tickets, and notifies HR via Teams.
naftiko: "0.5"
info:
label: "Workday Offboarding Orchestrator"
description: "When an employee termination is processed in Workday, disables the Microsoft 365 account, resolves open ServiceNow tickets, and notifies HR via Teams."
tags:
- hr
- offboarding
- workday
- microsoft-365
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday worker ID and termination date, disable the Microsoft 365 account and notify HR in Teams. Use when a termination is confirmed in Workday."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID for the departing employee."
- name: termination_date
in: body
type: string
description: "The effective termination date in ISO 8601 format."
steps:
- name: get-worker
type: call
call: "workday-offboard.get-worker"
with:
worker_id: "{{worker_id}}"
- name: disable-account
type: call
call: "msgraph-offboard.disable-user"
with:
user_id: "{{get-worker.email}}"
- name: notify-hr
type: call
call: "msteams-hr.post-message"
with:
channel_id: "$secrets.hr_teams_channel"
text: "Offboarding complete for {{get-worker.firstName}} {{get-worker.lastName}}. Account disabled as of {{termination_date}}."
consumes:
- type: http
namespace: workday-offboard
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: 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: msteams-hr
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: channel_id
in: path
operations:
- name: post-message
method: POST
When a Workday org restructure is processed, triggers an Okta access review and creates a compliance ticket.
naftiko: "0.5"
info:
label: "Workday Org Change to Access Review"
description: "When a Workday org restructure is processed, triggers an Okta access review and creates a compliance ticket."
tags:
- compliance
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance
port: 8080
tools:
- name: workday-org-change-to-access-review
description: "When a Workday org restructure is processed, triggers an Okta access review and creates a compliance ticket."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-workday
type: call
call: workday.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-okta
type: call
call: okta.create-record
with:
reference: "{{process-workday.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_compliance_team_id"
channel_id: "$secrets.teams_compliance_channel_id"
text: "Workday Org Change to Access Review: {{source_id}} | {{summary}} | Ref: {{create-okta.id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://sony.workday.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: records
path: "/workers"
operations:
- name: process-record
method: POST
- type: http
namespace: okta
baseUri: "https://sony.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: records
path: "/users"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
At payroll period close, retrieves headcount and total compensation data from Workday and publishes a period close summary to the finance team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Workday Payroll Period Close Report"
description: "At payroll period close, retrieves headcount and total compensation data from Workday and publishes a period close summary to the finance team's Microsoft Teams channel."
tags:
- hr
- finance
- payroll
- workday
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: payroll-close
port: 8080
tools:
- name: publish-payroll-close-report
description: "Given a Workday payroll period ID and company code, retrieve period headcount and total compensation and post a close summary to the finance Teams channel. Use at the end of each Sony payroll period."
inputParameters:
- name: period_id
in: body
type: string
description: "The Workday payroll period ID."
- name: company_code
in: body
type: string
description: "The Workday company code (e.g., Sony Corporation)."
steps:
- name: get-payroll-results
type: call
call: "workday-payroll.get-period-results"
with:
period_id: "{{period_id}}"
company_code: "{{company_code}}"
- name: post-close-report
type: call
call: "msteams-payroll.post-message"
with:
channel_id: "$secrets.finance_teams_channel"
text: "Payroll period {{period_id}} closed for {{company_code}}. Headcount: {{get-payroll-results.headcount}}. Total compensation: {{get-payroll-results.totalCompensation}}"
consumes:
- type: http
namespace: workday-payroll
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: payroll-results
path: "/payrollResults"
inputParameters:
- name: period_id
in: query
- name: company_code
in: query
operations:
- name: get-period-results
method: GET
- type: http
namespace: msteams-payroll
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: channel_id
in: path
operations:
- name: post-message
method: POST
When a promotion is processed in Workday, updates Okta groups and creates a ServiceNow access request.
naftiko: "0.5"
info:
label: "Workday Promotion to Access Upgrade"
description: "When a promotion is processed in Workday, updates Okta groups and creates a ServiceNow access request."
tags:
- hr
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: workday-promotion-to-access-upgrade
description: "When a promotion is processed in Workday, updates Okta groups and creates a ServiceNow access request."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-workday
type: call
call: workday.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-okta
type: call
call: okta.create-record
with:
reference: "{{process-workday.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_hr_team_id"
channel_id: "$secrets.teams_hr_channel_id"
text: "Workday Promotion to Access Upgrade: {{source_id}} | {{summary}} | Ref: {{create-okta.id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://sony.workday.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: records
path: "/workers"
operations:
- name: process-record
method: POST
- type: http
namespace: okta
baseUri: "https://sony.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: records
path: "/users"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a termination is processed in Workday, deactivates the user in Okta and creates a ServiceNow access revocation ticket.
naftiko: "0.5"
info:
label: "Workday Termination to Okta Deprovisioning"
description: "When a termination is processed in Workday, deactivates the user in Okta and creates a ServiceNow access revocation ticket."
tags:
- hr
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: workday-termination-to-okta-deprovisioning
description: "When a termination is processed in Workday, deactivates the user in Okta and creates a ServiceNow access revocation ticket."
inputParameters:
- name: source_id
in: body
type: string
description: "Source record identifier."
- name: summary
in: body
type: string
description: "Summary of the event."
- name: severity
in: body
type: string
description: "Priority or severity level."
steps:
- name: process-workday
type: call
call: workday.process-record
with:
id: "{{source_id}}"
description: "{{summary}}"
- name: create-okta
type: call
call: okta.create-record
with:
reference: "{{process-workday.id}}"
summary: "{{summary}}"
priority: "{{severity}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.teams_hr_team_id"
channel_id: "$secrets.teams_hr_channel_id"
text: "Workday Termination to Okta Deprovisioning: {{source_id}} | {{summary}} | Ref: {{create-okta.id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://sony.workday.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: records
path: "/workers"
operations:
- name: process-record
method: POST
- type: http
namespace: okta
baseUri: "https://sony.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: records
path: "/users"
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Enriches a company record with firmographic data from ZoomInfo.
naftiko: "0.5"
info:
label: "ZoomInfo Company Enrichment Lookup"
description: "Enriches a company record with firmographic data from ZoomInfo."
tags:
- sales
- zoominfo
- data-enrichment
capability:
exposes:
- type: mcp
namespace: sales
port: 8080
tools:
- name: enrich-company
description: "Given a domain, return the ZoomInfo company profile."
inputParameters:
- name: domain
in: body
type: string
description: "Company website domain."
call: zoominfo.enrich-company
with:
companyWebsite: "{{domain}}"
outputParameters:
- name: result_id
type: string
mapping: "$.id"
- name: result_status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: zoominfo
baseUri: "https://api.example.com/v1"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: enrich
path: "/enrich/company"
inputParameters:
- name: companyWebsite
in: query
operations:
- name: enrich-company
method: GET