Oracle Capabilities
Naftiko 0.5 capability definitions for Oracle - 100 capabilities showing integration workflows and service orchestrations.
Loads review data.
naftiko: "0.5"
info:
label: "Access Review to Snowflake"
description: "Loads review data."
tags:
- security
- compliance
- okta
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: access
port: 8080
tools:
- name: access-review-to-snowflake
description: "Loads review data."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "okta.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Access Review to Snowflake"
consumes:
- type: http
namespace: okta
baseUri: "https://okta.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Retrieves EC2 instance state.
naftiko: "0.5"
info:
label: "AWS EC2 Instance Status"
description: "Retrieves EC2 instance state."
tags:
- cloud
- infrastructure
- aws
capability:
exposes:
- type: mcp
namespace: cloud-infra
port: 8080
tools:
- name: get-ec2
description: "Given instance ID, return state."
inputParameters:
- name: instance_id
in: body
type: string
description: "Instance Id"
call: aws.describe-instance
with:
instance_id: "{{instance_id}}"
consumes:
- type: http
namespace: aws
baseUri: "https://ec2.us-east-1.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_sigv4_token"
placement: header
resources:
- name: instances
path: "/"
operations:
- name: describe-instance
method: GET
Creates FinOps ticket.
naftiko: "0.5"
info:
label: "Azure Cost Anomaly to Jira"
description: "Creates FinOps ticket."
tags:
- cloud
- finops
- azure
- jira
- slack
capability:
exposes:
- type: mcp
namespace: azure
port: 8080
tools:
- name: azure-cost-anomaly-to-jira
description: "Creates FinOps ticket."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "azure.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Azure Cost Anomaly to Jira"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Azure Cost Anomaly to Jira triggered"
consumes:
- type: http
namespace: azure
baseUri: "https://azure.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Azure cost for resource group.
naftiko: "0.5"
info:
label: "Azure Cost Lookup"
description: "Queries Azure cost for resource group."
tags:
- cloud
- finops
- azure
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: get-cost
description: "Given subscription, return cost."
inputParameters:
- name: subscription_id
in: body
type: string
description: "Subscription Id"
call: azure-cost.get-cost
with:
subscription_id: "{{subscription_id}}"
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: cost
path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query"
operations:
- name: get-cost
method: POST
Creates bug for failures.
naftiko: "0.5"
info:
label: "Azure DevOps to Jira"
description: "Creates bug for failures."
tags:
- devops
- ci-cd
- azure-devops
- jira
capability:
exposes:
- type: mcp
namespace: azure
port: 8080
tools:
- name: azure-devops-failure-to-jira
description: "Creates bug for failures."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "azure-devops.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Azure DevOps to Jira"
consumes:
- type: http
namespace: azure-devops
baseUri: "https://azure-devops.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.azure_devops_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.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
Reminds unenrolled employees.
naftiko: "0.5"
info:
label: "Benefits Enrollment Reminder"
description: "Reminds unenrolled employees."
tags:
- hr
- workday
- servicenow
- slack
- benefits
capability:
exposes:
- type: mcp
namespace: benefits
port: 8080
tools:
- name: benefits-enrollment-reminder
description: "Reminds unenrolled employees."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "workday.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Benefits Enrollment Reminder"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Benefits Enrollment Reminder triggered"
consumes:
- type: http
namespace: workday
baseUri: "https://workday.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Applies on approval.
naftiko: "0.5"
info:
label: "Change to Terraform Apply"
description: "Applies on approval."
tags:
- itsm
- infrastructure
- servicenow
- terraform
capability:
exposes:
- type: mcp
namespace: change
port: 8080
tools:
- name: change-to-terraform-apply
description: "Applies on approval."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "infrastructure.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Change to Terraform Apply"
consumes:
- type: http
namespace: infrastructure
baseUri: "https://infrastructure.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.infrastructure_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Blocks and alerts.
naftiko: "0.5"
info:
label: "Cloudflare Block to PagerDuty"
description: "Blocks and alerts."
tags:
- security
- networking
- cloudflare
- pagerduty
capability:
exposes:
- type: mcp
namespace: cloudflare
port: 8080
tools:
- name: cloudflare-block-to-pagerduty
description: "Blocks and alerts."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "cloudflare.get-data"
with:
id: "{{input_id}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
title: "Cloudflare Block to PagerDuty"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://cloudflare.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "Token token=$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Lists DNS records for zone.
naftiko: "0.5"
info:
label: "Cloudflare DNS Records"
description: "Lists DNS records for zone."
tags:
- networking
- dns
- cloudflare
capability:
exposes:
- type: mcp
namespace: dns
port: 8080
tools:
- name: list-records
description: "Given zone ID, return records."
inputParameters:
- name: zone_id
in: body
type: string
description: "Zone Id"
call: cloudflare.list-records
with:
zone_id: "{{zone_id}}"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: dns-records
path: "/zones/{{zone_id}}/dns_records"
operations:
- name: list-records
method: GET
Creates incident for alarms.
naftiko: "0.5"
info:
label: "CloudWatch to ServiceNow"
description: "Creates incident for alarms."
tags:
- cloud
- itsm
- aws
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: cloudwatch
port: 8080
tools:
- name: cloudwatch-alarm-to-incident
description: "Creates incident for alarms."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "aws.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "CloudWatch to ServiceNow"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "CloudWatch to ServiceNow triggered"
consumes:
- type: http
namespace: aws
baseUri: "https://aws.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.aws_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Compares Terraform and CMDB.
naftiko: "0.5"
info:
label: "CMDB Drift Detection"
description: "Compares Terraform and CMDB."
tags:
- itsm
- infrastructure
- servicenow
- terraform
- governance
capability:
exposes:
- type: mcp
namespace: cmdb
port: 8080
tools:
- name: cmdb-drift-detection
description: "Compares Terraform and CMDB."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "infrastructure.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "CMDB Drift Detection"
consumes:
- type: http
namespace: infrastructure
baseUri: "https://infrastructure.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.infrastructure_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Refreshes dashboard.
naftiko: "0.5"
info:
label: "Compensation to Power BI"
description: "Refreshes dashboard."
tags:
- hr
- analytics
- workday
- power-bi
- slack
capability:
exposes:
- type: mcp
namespace: comp
port: 8080
tools:
- name: comp-review-to-power-bi
description: "Refreshes dashboard."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "analytics.get-data"
with:
id: "{{input_id}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Compensation to Power BI triggered"
consumes:
- type: http
namespace: analytics
baseUri: "https://analytics.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates compliance task.
naftiko: "0.5"
info:
label: "Concur Expense Violation"
description: "Creates compliance task."
tags:
- finance
- compliance
- sap-concur
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: concur
port: 8080
tools:
- name: concur-expense-violation
description: "Creates compliance task."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "sap-concur.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Concur Expense Violation"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Concur Expense Violation triggered"
consumes:
- type: http
namespace: sap-concur
baseUri: "https://sap-concur.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_concur_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Publishes a new technical knowledge base article to a Confluence space and notifies the relevant Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Publish"
description: "Publishes a new technical knowledge base article to a Confluence space and notifies the relevant Microsoft Teams channel."
tags:
- communication
- confluence
- microsoft-teams
- documentation
capability:
exposes:
- type: mcp
namespace: kb-publishing
port: 8080
tools:
- name: publish-kb-article
description: "Given a Confluence space key, parent page, title, and content, create a knowledge base article and notify the designated Teams channel. Use for publishing product documentation, runbooks, or support articles."
inputParameters:
- name: space_key
in: body
type: string
description: "The Confluence space key (e.g., 'DOCS')."
- name: parent_page_id
in: body
type: string
description: "Confluence parent page ID for the KB article."
- name: title
in: body
type: string
description: "Title of the knowledge base article."
- name: content
in: body
type: string
description: "Article content in Confluence storage format."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID to notify of the new article."
steps:
- name: create-kb-article
type: call
call: "confluence.create-page"
with:
space_key: "{{space_key}}"
parent_page_id: "{{parent_page_id}}"
title: "{{title}}"
content: "{{content}}"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "New KB article published: {{title}} — {{create-kb-article.webui_url}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://oracle.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Confluence page by title.
naftiko: "0.5"
info:
label: "Confluence Page Search"
description: "Retrieves Confluence page by title."
tags:
- knowledge
- confluence
- documentation
capability:
exposes:
- type: mcp
namespace: knowledge
port: 8080
tools:
- name: get-page
description: "Given title, return page."
inputParameters:
- name: title
in: body
type: string
description: "Title"
call: confluence.get-page
with:
title: "{{title}}"
consumes:
- type: http
namespace: confluence
baseUri: "https://oracle-wiki.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content"
operations:
- name: get-page
method: GET
Enrolls expiring contracts.
naftiko: "0.5"
info:
label: "Contract to HubSpot Nurture"
description: "Enrolls expiring contracts."
tags:
- crm
- marketing
- salesforce
- hubspot
- slack
capability:
exposes:
- type: mcp
namespace: contract
port: 8080
tools:
- name: contract-to-hubspot-nurture
description: "Enrolls expiring contracts."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "salesforce.get-data"
with:
id: "{{input_id}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Contract to HubSpot Nurture triggered"
consumes:
- type: http
namespace: salesforce
baseUri: "https://salesforce.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates Jira for failures.
naftiko: "0.5"
info:
label: "Databricks Failure to Jira"
description: "Creates Jira for failures."
tags:
- data
- devops
- azure-databricks
- jira
- slack
capability:
exposes:
- type: mcp
namespace: databricks
port: 8080
tools:
- name: databricks-failure-to-jira
description: "Creates Jira for failures."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "data.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Databricks Failure to Jira"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Databricks Failure to Jira triggered"
consumes:
- type: http
namespace: data
baseUri: "https://data.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.data_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates PagerDuty incident and notifies Slack on critical.
naftiko: "0.5"
info:
label: "Datadog Alert to PagerDuty and Slack"
description: "Creates PagerDuty incident and notifies Slack on critical."
tags:
- observability
- incident-response
- datadog
- pagerduty
- slack
capability:
exposes:
- type: mcp
namespace: datadog
port: 8080
tools:
- name: datadog-alert-to-pagerduty-slack
description: "Creates PagerDuty incident and notifies Slack on critical."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "observability.get-data"
with:
id: "{{input_id}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
title: "Datadog Alert to PagerDuty and Slack"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Datadog Alert to PagerDuty and Slack triggered"
consumes:
- type: http
namespace: observability
baseUri: "https://observability.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.observability_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "Token token=$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Datadog monitor fires a critical alert, automatically creates a PagerDuty incident for the on-call engineer and posts context to the ops Slack channel.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Alert to PagerDuty"
description: "When a Datadog monitor fires a critical alert, automatically creates a PagerDuty incident for the on-call engineer and posts context to the ops Slack channel."
tags:
- observability
- datadog
- pagerduty
- slack
- incident-response
capability:
exposes:
- type: mcp
namespace: alerting-ops
port: 8080
tools:
- name: escalate-datadog-alert
description: "Given a Datadog monitor ID and PagerDuty service ID, fetch alert details and create a PagerDuty incident, then post context to Slack. Use when a critical Datadog monitor fires for Oracle Cloud Infrastructure services."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that fired the critical alert."
- name: pagerduty_service_id
in: body
type: string
description: "The PagerDuty service ID for the on-call routing."
- name: slack_channel
in: body
type: string
description: "Slack channel to post alert context to."
steps:
- name: get-monitor
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: create-pd-incident
type: call
call: "pagerduty.create-incident"
with:
service_id: "{{pagerduty_service_id}}"
title: "Datadog Alert: {{get-monitor.name}}"
incident_key: "dd-{{monitor_id}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Critical Alert: {{get-monitor.name}} | PagerDuty Incident: {{create-pd-incident.incident_number}} | State: {{get-monitor.overall_state}}"
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_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves Datadog monitor status.
naftiko: "0.5"
info:
label: "Datadog Monitor Lookup"
description: "Retrieves Datadog monitor status."
tags:
- observability
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: monitoring
port: 8080
tools:
- name: get-monitor
description: "Given monitor ID, return status."
inputParameters:
- name: monitor_id
in: body
type: string
description: "Monitor Id"
call: datadog.get-monitor
with:
monitor_id: "{{monitor_id}}"
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}}"
operations:
- name: get-monitor
method: GET
Queries Datadog for the current monitor status of a named Oracle Cloud service and returns the aggregate health state.
naftiko: "0.5"
info:
label: "Datadog Service Health Dashboard Lookup"
description: "Queries Datadog for the current monitor status of a named Oracle Cloud service and returns the aggregate health state."
tags:
- observability
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: cloud-health
port: 8080
tools:
- name: get-service-health
description: "Given a Datadog service name, return the current monitor states and total alert count. Use to check Oracle Cloud service health before deployments or executive briefings."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name to query (e.g., 'oci-compute-service')."
call: "datadog.get-monitors"
with:
name: "{{service_name}}"
outputParameters:
- name: monitors
type: array
mapping: "$.monitors"
- name: alert_count
type: number
mapping: "$.total_count"
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"
inputParameters:
- name: name
in: query
operations:
- name: get-monitors
method: GET
Queries Datadog for SLO compliance data across Oracle Cloud services in the past 7 days and publishes a weekly reliability report to Confluence.
naftiko: "0.5"
info:
label: "Datadog SLO Weekly Reliability Report"
description: "Queries Datadog for SLO compliance data across Oracle Cloud services in the past 7 days and publishes a weekly reliability report to Confluence."
tags:
- observability
- datadog
- confluence
- slo
- reporting
capability:
exposes:
- type: mcp
namespace: reliability-ops
port: 8080
tools:
- name: publish-weekly-slo-report
description: "Fetch Datadog SLO compliance for Oracle Cloud services over the past 7 days and publish a weekly reliability report to Confluence. Use for engineering leadership reliability reviews."
inputParameters:
- name: confluence_space_key
in: body
type: string
description: "Confluence space key for the SLO report."
- name: confluence_parent_id
in: body
type: string
description: "Confluence parent page ID for the weekly report."
- name: slo_query
in: body
type: string
description: "Datadog SLO query filter string (e.g., 'service:oci-production')."
steps:
- name: get-slo-data
type: call
call: "datadog.list-slos"
with:
query: "{{slo_query}}"
- name: publish-slo-report
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space_key}}"
parent_page_id: "{{confluence_parent_id}}"
title: "Weekly SLO Reliability Report"
content: "Oracle Cloud SLO compliance data from Datadog for the past 7 days. Total SLOs monitored: {{get-slo-data.total_count}}."
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: slos
path: "/slo"
inputParameters:
- name: query
in: query
operations:
- name: list-slos
method: GET
- type: http
namespace: confluence
baseUri: "https://oracle.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Creates task for vulnerabilities.
naftiko: "0.5"
info:
label: "Dependabot to Jira Security"
description: "Creates task for vulnerabilities."
tags:
- security
- devops
- github
- jira
- slack
capability:
exposes:
- type: mcp
namespace: dependabot
port: 8080
tools:
- name: dependabot-to-jira-security
description: "Creates task for vulnerabilities."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "github.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Dependabot to Jira Security"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Dependabot to Jira Security triggered"
consumes:
- type: http
namespace: github
baseUri: "https://github.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates incident for problems.
naftiko: "0.5"
info:
label: "Dynatrace to ServiceNow"
description: "Creates incident for problems."
tags:
- observability
- itsm
- dynatrace
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: dynatrace
port: 8080
tools:
- name: dynatrace-to-servicenow
description: "Creates incident for problems."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "observability.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Dynatrace to ServiceNow"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Dynatrace to ServiceNow triggered"
consumes:
- type: http
namespace: observability
baseUri: "https://observability.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.observability_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Workday termination is recorded, suspends the Okta account, removes Salesforce user licenses, and creates a ServiceNow offboarding task.
naftiko: "0.5"
info:
label: "Employee Offboarding and Deprovisioning"
description: "When a Workday termination is recorded, suspends the Okta account, removes Salesforce user licenses, and creates a ServiceNow offboarding task."
tags:
- hr
- offboarding
- workday
- okta
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID, suspend the Okta account, remove Salesforce user permissions, and create a ServiceNow offboarding task. Use when an Oracle employee separates from the company."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: last_day
in: body
type: string
description: "Employee's last working day in ISO 8601 format (YYYY-MM-DD)."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: suspend-okta
type: call
call: "okta.suspend-user"
with:
user_id: "{{get-employee.okta_user_id}}"
- name: freeze-salesforce-user
type: call
call: "salesforce.update-user"
with:
user_id: "{{get-employee.salesforce_user_id}}"
is_active: "false"
- name: create-offboarding-task
type: call
call: "servicenow.create-task"
with:
short_description: "Offboarding: {{get-employee.full_name}} — last day {{last_day}}"
category: "hr_offboarding"
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: "/oracle/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://oracle.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-suspend
path: "/users/{{user_id}}/lifecycle/suspend"
inputParameters:
- name: user_id
in: path
operations:
- name: suspend-user
method: POST
- type: http
namespace: salesforce
baseUri: "https://oracle.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/sobjects/User/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta access, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions Okta access, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, Okta, and Microsoft Teams. Use when a new Oracle employee joins globally."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee's start date in ISO 8601 format (YYYY-MM-DD)."
- name: business_unit
in: body
type: string
description: "Oracle business unit for the new hire (e.g., 'Cloud Infrastructure')."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-onboarding-ticket
type: call
call: "servicenow.create-incident"
with:
category: "hr_onboarding"
short_description: "New hire onboarding: {{get-employee.full_name}}"
assigned_group: "IT_Onboarding"
- name: activate-okta-user
type: call
call: "okta.activate-user"
with:
user_id: "{{get-employee.okta_user_id}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Oracle, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-onboarding-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: "/oracle/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: okta
baseUri: "https://oracle.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/activate"
inputParameters:
- name: user_id
in: path
operations:
- name: activate-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Suspends on risk.
naftiko: "0.5"
info:
label: "Entra Risk to Okta Suspend"
description: "Suspends on risk."
tags:
- security
- identity
- azure
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: entra
port: 8080
tools:
- name: entra-risk-to-okta-suspend
description: "Suspends on risk."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "identity.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Entra Risk to Okta Suspend"
consumes:
- type: http
namespace: identity
baseUri: "https://identity.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.identity_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Updates on completion.
naftiko: "0.5"
info:
label: "Epic to Salesforce"
description: "Updates on completion."
tags:
- devops
- crm
- jira
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: epic
port: 8080
tools:
- name: epic-to-salesforce
description: "Updates on completion."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "jira.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Epic to Salesforce"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Epic to Salesforce triggered"
consumes:
- type: http
namespace: jira
baseUri: "https://jira.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Posts failure to Slack.
naftiko: "0.5"
info:
label: "GitHub Actions Failure"
description: "Posts failure to Slack."
tags:
- devops
- ci-cd
- github
- slack
capability:
exposes:
- type: mcp
namespace: github
port: 8080
tools:
- name: github-actions-failure-notify
description: "Posts failure to Slack."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "github.get-data"
with:
id: "{{input_id}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "GitHub Actions Failure triggered"
consumes:
- type: http
namespace: github
baseUri: "https://github.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
On a GitHub Actions failure on a protected branch, creates a Jira bug, posts a Datadog deployment marker, and alerts the engineering Slack channel.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Handler"
description: "On a GitHub Actions failure on a protected branch, creates a Jira bug, posts a Datadog deployment marker, and alerts the engineering Slack channel."
tags:
- devops
- ci-cd
- github
- jira
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions pipeline failure event, create a Jira bug, post a Datadog event marker, and alert the #engineering-alerts Slack channel. Use when a CI/CD pipeline fails on a protected branch in Oracle's GitHub org."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "The GitHub Actions workflow run ID."
- name: repository
in: body
type: string
description: "The GitHub repository full name (e.g., 'oracle/graal')."
- name: branch
in: body
type: string
description: "The branch name where the failure occurred."
- name: failed_job
in: body
type: string
description: "Name of the failed workflow job."
- name: commit_sha
in: body
type: string
description: "The commit SHA that triggered the run."
- name: log_url
in: body
type: string
description: "URL to the full pipeline failure log."
steps:
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repository}} / {{branch}} — {{failed_job}}"
description: "Pipeline: {{pipeline_id}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nLog: {{log_url}}"
- name: post-datadog-event
type: call
call: "datadog.create-event"
with:
title: "CI Failure: {{repository}} {{branch}}"
text: "Job {{failed_job}} failed. Commit: {{commit_sha}}"
alert_type: "error"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "engineering-alerts"
text: "Pipeline Failure: {{repository}} | Branch: {{branch}} | Job: {{failed_job}} | Jira: {{create-jira-bug.key}} | Log: {{log_url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://oracle.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches open Dependabot security alerts for a GitHub repository and creates Jira security tickets for critical severity findings.
naftiko: "0.5"
info:
label: "GitHub Dependabot Vulnerability Triage"
description: "Fetches open Dependabot security alerts for a GitHub repository and creates Jira security tickets for critical severity findings."
tags:
- security
- devops
- github
- jira
- vulnerability-management
capability:
exposes:
- type: mcp
namespace: vuln-triage
port: 8080
tools:
- name: triage-dependabot-alerts
description: "Fetch open Dependabot alerts at critical severity for a GitHub repository and create a Jira ticket for remediation. Use during weekly vulnerability review or after a new CVE disclosure affecting Oracle's open source projects."
inputParameters:
- name: repository
in: body
type: string
description: "GitHub repository name within the Oracle org (e.g., 'graalvm/graal')."
- name: jira_project_key
in: body
type: string
description: "Jira project key for security remediation tickets (e.g., 'SECURITY')."
steps:
- name: list-alerts
type: call
call: "github.list-dependabot-alerts"
with:
owner: "oracle"
repo: "{{repository}}"
severity: "critical"
state: "open"
- name: create-security-ticket
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
issuetype: "Bug"
summary: "Dependabot critical vulnerabilities in {{repository}}"
description: "Open critical Dependabot alerts in {{repository}}. Immediate remediation required per Oracle security policy."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{owner}}/{{repo}}/dependabot/alerts"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: severity
in: query
- name: state
in: query
operations:
- name: list-dependabot-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://oracle.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
Updates ServiceNow change on PR merge.
naftiko: "0.5"
info:
label: "GitHub PR to ServiceNow Change"
description: "Updates ServiceNow change on PR merge."
tags:
- devops
- itsm
- github
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: github
port: 8080
tools:
- name: github-pr-to-servicenow-change
description: "Updates ServiceNow change on PR merge."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "github.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "GitHub PR to ServiceNow Change"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "GitHub PR to ServiceNow Change triggered"
consumes:
- type: http
namespace: github
baseUri: "https://github.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches GitHub code scanning alerts for a pull request and blocks merge by creating a Jira security ticket if critical findings are present.
naftiko: "0.5"
info:
label: "GitHub Pull Request Security Scan Gate"
description: "Fetches GitHub code scanning alerts for a pull request and blocks merge by creating a Jira security ticket if critical findings are present."
tags:
- security
- devops
- github
- jira
capability:
exposes:
- type: mcp
namespace: security-gate
port: 8080
tools:
- name: gate-pr-on-security-scan
description: "Fetch GitHub code scanning alerts for a repository ref. If critical or high severity findings exist, create a Jira security ticket. Use as a pull request gate before merging to main branch."
inputParameters:
- name: repository
in: body
type: string
description: "The GitHub repository name within the Oracle org."
- name: ref
in: body
type: string
description: "The git ref (branch or SHA) to check for security alerts."
- name: jira_project_key
in: body
type: string
description: "Jira project key for security tickets (e.g., 'SECURITY')."
steps:
- name: get-scan-alerts
type: call
call: "github.list-code-scanning-alerts"
with:
owner: "oracle"
repo: "{{repository}}"
ref: "{{ref}}"
severity: "critical"
- name: create-security-ticket
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
issuetype: "Bug"
summary: "Security scan: critical findings in {{repository}} @ {{ref}}"
description: "Critical code scanning alerts found in {{repository}} on {{ref}}. Review and remediate before merging."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: code-scanning-alerts
path: "/repos/{{owner}}/{{repo}}/code-scanning/alerts"
inputParameters:
- name: owner
in: path
- name: repo
in: path
- name: ref
in: query
- name: severity
in: query
operations:
- name: list-code-scanning-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://oracle.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 GitHub repository metadata.
naftiko: "0.5"
info:
label: "GitHub Repository Lookup"
description: "Retrieves GitHub repository metadata."
tags:
- devops
- github
- code-management
capability:
exposes:
- type: mcp
namespace: code-mgmt
port: 8080
tools:
- name: get-repo
description: "Given owner/repo, return metadata."
inputParameters:
- name: repo
in: body
type: string
description: "Repo"
call: github.get-repo
with:
repo: "{{repo}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
operations:
- name: get-repo
method: GET
Returns current headcount by department and region from Workday, used for Oracle workforce planning and executive reporting.
naftiko: "0.5"
info:
label: "Global Headcount Snapshot"
description: "Returns current headcount by department and region from Workday, used for Oracle workforce planning and executive reporting."
tags:
- hr
- workforce-planning
- workday
- reporting
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Return a snapshot of active Oracle employees grouped by department, region, and cost center from Workday. Use for global workforce planning, executive headcount reviews, or finance reporting."
call: "workday.list-workers"
outputParameters:
- name: employees
type: array
mapping: "$.data"
- name: total_count
type: number
mapping: "$.total"
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: "/oracle/workers"
operations:
- name: list-workers
method: GET
Creates incident with runbook.
naftiko: "0.5"
info:
label: "Grafana to ServiceNow"
description: "Creates incident with runbook."
tags:
- observability
- itsm
- grafana
- servicenow
- confluence
capability:
exposes:
- type: mcp
namespace: grafana
port: 8080
tools:
- name: grafana-alert-to-incident
description: "Creates incident with runbook."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "observability.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Grafana to ServiceNow"
- name: create-page
type: call
call: "confluence.create-page"
with:
title: "Grafana to ServiceNow"
consumes:
- type: http
namespace: observability
baseUri: "https://observability.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.observability_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: confluence
baseUri: "https://oracle-wiki.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
Searches HubSpot for contact by email.
naftiko: "0.5"
info:
label: "HubSpot Contact Lookup"
description: "Searches HubSpot for contact by email."
tags:
- crm
- marketing
- hubspot
capability:
exposes:
- type: mcp
namespace: crm-marketing
port: 8080
tools:
- name: search-contact
description: "Given email, find contact."
inputParameters:
- name: email
in: body
type: string
description: "Email"
call: hubspot.search-contacts
with:
email: "{{email}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/crm/v3/objects/contacts/search"
operations:
- name: search-contacts
method: POST
Syncs leads to Salesforce.
naftiko: "0.5"
info:
label: "HubSpot Lead to Salesforce"
description: "Syncs leads to Salesforce."
tags:
- crm
- marketing
- hubspot
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: hubspot
port: 8080
tools:
- name: hubspot-lead-to-salesforce
description: "Syncs leads to Salesforce."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "hubspot.get-data"
with:
id: "{{input_id}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "HubSpot Lead to Salesforce triggered"
consumes:
- type: http
namespace: hubspot
baseUri: "https://hubspot.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches HubSpot email campaign performance for the past 30 days and publishes a digest to the Oracle marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "HubSpot Marketing Campaign Digest"
description: "Fetches HubSpot email campaign performance for the past 30 days and publishes a digest to the Oracle marketing Microsoft Teams channel."
tags:
- marketing
- hubspot
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: marketing-reporting
port: 8080
tools:
- name: digest-campaign-performance
description: "Fetch HubSpot email campaign metrics for the past 30 days and post open rate, click rate, and conversion stats to the marketing Teams channel. Use for monthly marketing performance reviews."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The HubSpot campaign ID to report on."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the marketing team."
steps:
- name: get-campaign-stats
type: call
call: "hubspot.get-campaign-stats"
with:
campaign_id: "{{campaign_id}}"
- name: post-digest
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Campaign Performance: {{get-campaign-stats.name}} | Sent: {{get-campaign-stats.numSent}} | Open Rate: {{get-campaign-stats.openRate}} | Click Rate: {{get-campaign-stats.clickRate}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/marketing/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: campaign-stats
path: "/emails/statistics/list"
inputParameters:
- name: campaign_id
in: query
operations:
- name: get-campaign-stats
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Syncs HubSpot marketing contacts that have crossed the MQL threshold into Salesforce as leads, with lead source and engagement data.
naftiko: "0.5"
info:
label: "HubSpot to Salesforce Contact Sync"
description: "Syncs HubSpot marketing contacts that have crossed the MQL threshold into Salesforce as leads, with lead source and engagement data."
tags:
- marketing
- sales
- hubspot
- salesforce
- lead-management
capability:
exposes:
- type: mcp
namespace: mql-sync
port: 8080
tools:
- name: sync-mql-to-salesforce
description: "Given a HubSpot contact ID, fetch contact and engagement details and create a Salesforce lead record with lead source and HubSpot score. Use when a HubSpot contact reaches MQL status for sales follow-up."
inputParameters:
- name: hubspot_contact_id
in: body
type: string
description: "The HubSpot contact ID to sync as a Salesforce lead."
steps:
- name: get-hubspot-contact
type: call
call: "hubspot.get-contact"
with:
contact_id: "{{hubspot_contact_id}}"
- name: create-salesforce-lead
type: call
call: "salesforce.create-lead"
with:
first_name: "{{get-hubspot-contact.firstname}}"
last_name: "{{get-hubspot-contact.lastname}}"
email: "{{get-hubspot-contact.email}}"
company: "{{get-hubspot-contact.company}}"
lead_source: "HubSpot MQL"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce
baseUri: "https://oracle.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead"
operations:
- name: create-lead
method: POST
Creates ServiceNow problem for recurring bugs.
naftiko: "0.5"
info:
label: "Jira Bug to ServiceNow Problem"
description: "Creates ServiceNow problem for recurring bugs."
tags:
- devops
- itsm
- jira
- servicenow
capability:
exposes:
- type: mcp
namespace: jira
port: 8080
tools:
- name: jira-bug-to-servicenow-problem
description: "Creates ServiceNow problem for recurring bugs."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "jira.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Jira Bug to ServiceNow Problem"
consumes:
- type: http
namespace: jira
baseUri: "https://jira.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Retrieves Jira issue status and assignee.
naftiko: "0.5"
info:
label: "Jira Issue Status Lookup"
description: "Retrieves Jira issue status and assignee."
tags:
- devops
- jira
- project-management
capability:
exposes:
- type: mcp
namespace: project-mgmt
port: 8080
tools:
- name: get-issue
description: "Given issue key, return status."
inputParameters:
- name: issue_key
in: body
type: string
description: "Issue Key"
call: jira.get-issue
with:
issue_key: "{{issue_key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
operations:
- name: get-issue
method: GET
Publishes release notes.
naftiko: "0.5"
info:
label: "Jira Release to Confluence"
description: "Publishes release notes."
tags:
- devops
- documentation
- jira
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: jira
port: 8080
tools:
- name: jira-release-to-confluence
description: "Publishes release notes."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "jira.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Jira Release to Confluence"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Jira Release to Confluence triggered"
consumes:
- type: http
namespace: jira
baseUri: "https://jira.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches the completed sprint metrics for a Jira board and publishes a sprint retrospective summary to Confluence.
naftiko: "0.5"
info:
label: "Jira Sprint Completion Report"
description: "Fetches the completed sprint metrics for a Jira board and publishes a sprint retrospective summary to Confluence."
tags:
- devops
- jira
- confluence
- reporting
- agile
capability:
exposes:
- type: mcp
namespace: sprint-reporting
port: 8080
tools:
- name: publish-sprint-report
description: "Given a Jira board ID and completed sprint ID, fetch sprint velocity, completion rate, and bug count, then publish a sprint report to Confluence. Use for sprint retrospectives or engineering velocity tracking."
inputParameters:
- name: board_id
in: body
type: integer
description: "The Jira agile board ID to report on."
- name: sprint_id
in: body
type: integer
description: "The completed Jira sprint ID."
- name: confluence_space_key
in: body
type: string
description: "Confluence space key for sprint reports."
- name: confluence_parent_id
in: body
type: string
description: "Confluence parent page ID for the sprint report."
steps:
- name: get-sprint-issues
type: call
call: "jira.search-issues"
with:
jql: "sprint = {{sprint_id}} AND project = ORDER BY status"
- name: publish-sprint-report
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space_key}}"
parent_page_id: "{{confluence_parent_id}}"
title: "Sprint Report — Sprint {{sprint_id}}"
content: "Sprint {{sprint_id}} completion report. Total issues: {{get-sprint-issues.total}}. Board: {{board_id}}."
consumes:
- type: http
namespace: jira
baseUri: "https://oracle.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: confluence
baseUri: "https://oracle.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Creates ticket for latency.
naftiko: "0.5"
info:
label: "Latency Spike to Jira"
description: "Creates ticket for latency."
tags:
- observability
- devops
- datadog
- jira
- slack
capability:
exposes:
- type: mcp
namespace: latency
port: 8080
tools:
- name: latency-spike-to-jira
description: "Creates ticket for latency."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "observability.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Latency Spike to Jira"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Latency Spike to Jira triggered"
consumes:
- type: http
namespace: observability
baseUri: "https://observability.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.observability_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Publishes an Oracle employer brand post to the LinkedIn company page and notifies the corporate communications Slack channel.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Post Publisher"
description: "Publishes an Oracle employer brand post to the LinkedIn company page and notifies the corporate communications Slack channel."
tags:
- marketing
- social
- linkedin
- slack
capability:
exposes:
- type: mcp
namespace: brand-publishing
port: 8080
tools:
- name: publish-linkedin-post
description: "Given post text, publish an employer brand or product announcement post to the Oracle LinkedIn company page and notify the #corporate-comms Slack channel. Use for product launches, award announcements, or recruitment campaigns."
inputParameters:
- name: post_text
in: body
type: string
description: "The text content of the LinkedIn post."
- name: visibility
in: body
type: string
description: "Post visibility: 'PUBLIC' or 'CONNECTIONS'."
steps:
- name: create-linkedin-post
type: call
call: "linkedin.create-ugc-post"
with:
text: "{{post_text}}"
visibility: "{{visibility}}"
- name: notify-comms
type: call
call: "slack.post-message"
with:
channel: "corporate-comms"
text: "LinkedIn post published: {{create-linkedin-post.activity_id}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_access_token"
resources:
- name: ugc-posts
path: "/ugcPosts"
operations:
- name: create-ugc-post
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates Slack channel and pages.
naftiko: "0.5"
info:
label: "Major Incident Bridge"
description: "Creates Slack channel and pages."
tags:
- itsm
- incident-response
- servicenow
- pagerduty
- slack
capability:
exposes:
- type: mcp
namespace: major
port: 8080
tools:
- name: major-incident-bridge
description: "Creates Slack channel and pages."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "servicenow.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Major Incident Bridge"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Major Incident Bridge triggered"
consumes:
- type: http
namespace: servicenow
baseUri: "https://servicenow.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves app health from New Relic.
naftiko: "0.5"
info:
label: "New Relic App Health"
description: "Retrieves app health from New Relic."
tags:
- observability
- new-relic
- apm
capability:
exposes:
- type: mcp
namespace: app-health
port: 8080
tools:
- name: get-health
description: "Given app name, return health."
inputParameters:
- name: app_name
in: body
type: string
description: "App Name"
call: newrelic.get-app
with:
name: "{{app_name}}"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apikey
key: "X-Api-Key"
value: "$secrets.newrelic_api_key"
placement: header
resources:
- name: applications
path: "/applications.json"
operations:
- name: get-app
method: GET
Creates Jira bug for errors.
naftiko: "0.5"
info:
label: "New Relic Error to Jira"
description: "Creates Jira bug for errors."
tags:
- observability
- devops
- new-relic
- jira
- slack
capability:
exposes:
- type: mcp
namespace: new
port: 8080
tools:
- name: new-relic-error-to-jira
description: "Creates Jira bug for errors."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "observability.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "New Relic Error to Jira"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "New Relic Error to Jira triggered"
consumes:
- type: http
namespace: observability
baseUri: "https://observability.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.observability_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Resets MFA and closes ticket.
naftiko: "0.5"
info:
label: "Okta MFA Reset with ServiceNow"
description: "Resets MFA and closes ticket."
tags:
- security
- identity
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: okta
port: 8080
tools:
- name: okta-mfa-reset-servicenow
description: "Resets MFA and closes ticket."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "identity.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Okta MFA Reset with ServiceNow"
consumes:
- type: http
namespace: identity
baseUri: "https://identity.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.identity_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Generates a list of Okta users with privileged group memberships and publishes the access certification report to Confluence for IT security review.
naftiko: "0.5"
info:
label: "Okta Quarterly Access Certification"
description: "Generates a list of Okta users with privileged group memberships and publishes the access certification report to Confluence for IT security review."
tags:
- identity
- security
- okta
- confluence
- access-review
capability:
exposes:
- type: mcp
namespace: access-certification
port: 8080
tools:
- name: run-access-certification
description: "List all users in privileged Okta groups and publish a quarterly access certification report to Confluence. Use for SOX, ISO 27001, or FedRAMP access review cycles."
inputParameters:
- name: okta_group_id
in: body
type: string
description: "The Okta group ID to audit for privileged access."
- name: confluence_space_key
in: body
type: string
description: "Confluence space key for the access certification report."
- name: confluence_parent_id
in: body
type: string
description: "Confluence parent page ID for the quarterly report."
steps:
- name: list-group-users
type: call
call: "okta.list-group-members"
with:
group_id: "{{okta_group_id}}"
- name: publish-cert-report
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space_key}}"
parent_page_id: "{{confluence_parent_id}}"
title: "Quarterly Access Certification — Group {{okta_group_id}}"
content: "Privileged access certification for Okta group {{okta_group_id}}. Users: {{list-group-users.count}}. Review and certify or revoke access for each entry."
consumes:
- type: http
namespace: okta
baseUri: "https://oracle.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"
inputParameters:
- name: group_id
in: path
operations:
- name: list-group-members
method: GET
- type: http
namespace: confluence
baseUri: "https://oracle.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Investigates and creates incident.
naftiko: "0.5"
info:
label: "Okta Risky Login"
description: "Investigates and creates incident."
tags:
- security
- identity
- okta
- splunk
- servicenow
capability:
exposes:
- type: mcp
namespace: okta
port: 8080
tools:
- name: okta-risky-login-investigation
description: "Investigates and creates incident."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "identity.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Okta Risky Login"
consumes:
- type: http
namespace: identity
baseUri: "https://identity.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.identity_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Lists Okta groups for a user.
naftiko: "0.5"
info:
label: "Okta User Groups Lookup"
description: "Lists Okta groups for a user."
tags:
- security
- identity
- okta
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-groups
description: "Given email, return groups."
inputParameters:
- name: email
in: body
type: string
description: "Email"
call: okta.get-user-groups
with:
user_id: "{{email}}"
consumes:
- type: http
namespace: okta
baseUri: "https://oracle.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "SSWS $secrets.okta_api_token"
placement: header
resources:
- name: groups
path: "/users/{{user_id}}/groups"
operations:
- name: get-user-groups
method: GET
Automatically provisions a new Okta user profile when a new hire record is created in Workday, assigning the correct department groups.
naftiko: "0.5"
info:
label: "Okta User Provisioning from Workday Hire"
description: "Automatically provisions a new Okta user profile when a new hire record is created in Workday, assigning the correct department groups."
tags:
- identity
- hr
- okta
- workday
- provisioning
capability:
exposes:
- type: mcp
namespace: identity-provisioning
port: 8080
tools:
- name: provision-new-user
description: "Given a Workday employee ID, create an Okta user profile with the correct department group assignments. Use when a new hire record is created in Workday to automate SSO provisioning."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: okta_department_group_id
in: body
type: string
description: "The Okta group ID for the employee's department."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: create-okta-user
type: call
call: "okta.create-user"
with:
first_name: "{{get-employee.first_name}}"
last_name: "{{get-employee.last_name}}"
email: "{{get-employee.work_email}}"
login: "{{get-employee.work_email}}"
- name: add-to-department-group
type: call
call: "okta-group.add-user-to-group"
with:
group_id: "{{okta_department_group_id}}"
user_id: "{{create-okta-user.id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/oracle/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://oracle.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: okta-group
baseUri: "https://oracle.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-users
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: add-user-to-group
method: PUT
Loads invoices.
naftiko: "0.5"
info:
label: "Oracle Invoice to Snowflake"
description: "Loads invoices."
tags:
- finance
- data
- oracle
- snowflake
capability:
exposes:
- type: mcp
namespace: oracle
port: 8080
tools:
- name: oracle-invoice-to-snowflake
description: "Loads invoices."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "data.get-data"
with:
id: "{{input_id}}"
consumes:
- type: http
namespace: data
baseUri: "https://data.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.data_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
When a PagerDuty incident is resolved, creates a Confluence postmortem page and notifies the engineering team via Slack.
naftiko: "0.5"
info:
label: "PagerDuty Incident Resolution Postmortem"
description: "When a PagerDuty incident is resolved, creates a Confluence postmortem page and notifies the engineering team via Slack."
tags:
- itsm
- pagerduty
- confluence
- slack
- postmortem
capability:
exposes:
- type: mcp
namespace: postmortem-ops
port: 8080
tools:
- name: create-incident-postmortem
description: "Given a resolved PagerDuty incident ID, fetch incident details and create a Confluence postmortem page, then notify the engineering Slack channel. Use when a P1/P2 incident is resolved to begin the postmortem process."
inputParameters:
- name: incident_id
in: body
type: string
description: "The resolved PagerDuty incident ID."
- name: confluence_space_key
in: body
type: string
description: "Confluence space key for postmortem documents."
- name: confluence_parent_id
in: body
type: string
description: "Confluence parent page ID for postmortems."
- name: slack_channel
in: body
type: string
description: "Engineering Slack channel to notify of new postmortem."
steps:
- name: get-pd-incident
type: call
call: "pagerduty.get-incident"
with:
incident_id: "{{incident_id}}"
- name: create-postmortem-page
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space_key}}"
parent_page_id: "{{confluence_parent_id}}"
title: "Postmortem: {{get-pd-incident.title}} ({{get-pd-incident.created_at}})"
content: "Incident: {{get-pd-incident.title}}\nID: {{incident_id}}\nSeverity: {{get-pd-incident.urgency}}\nCreated: {{get-pd-incident.created_at}}\nResolved: {{get-pd-incident.resolved_at}}\n\nTimeline, root cause, and action items to be completed by the team."
- name: notify-engineering
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Postmortem Created: {{get-pd-incident.title}} | Confluence: {{create-postmortem-page.webui_url}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
- type: http
namespace: confluence
baseUri: "https://oracle.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves current on-call engineer.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Lookup"
description: "Retrieves current on-call engineer."
tags:
- operations
- pagerduty
- incident-response
capability:
exposes:
- type: mcp
namespace: ops
port: 8080
tools:
- name: get-on-call
description: "Given schedule ID, return on-call."
inputParameters:
- name: schedule_id
in: body
type: string
description: "Schedule Id"
call: pagerduty.get-on-call
with:
schedule_id: "{{schedule_id}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "Token token=$secrets.pagerduty_token"
placement: header
resources:
- name: schedules
path: "/schedules/{{schedule_id}}"
operations:
- name: get-on-call
method: GET
Fetches the current on-call engineer for a PagerDuty schedule and returns their contact information for incident routing.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Fetches the current on-call engineer for a PagerDuty schedule and returns their contact information for incident routing."
tags:
- itsm
- pagerduty
- incident-response
- on-call
capability:
exposes:
- type: mcp
namespace: oncall-ops
port: 8080
tools:
- name: get-oncall-engineer
description: "Given a PagerDuty schedule ID, return the current on-call engineer's name and contact info. Use to identify the correct responder before creating incidents or escalations."
inputParameters:
- name: schedule_id
in: body
type: string
description: "The PagerDuty schedule ID to query for the current on-call engineer."
call: "pagerduty.get-oncall"
with:
schedule_ids: "{{schedule_id}}"
outputParameters:
- name: oncall_user_name
type: string
mapping: "$.oncalls[0].user.name"
- name: oncall_user_email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: oncalls
path: "/oncalls"
inputParameters:
- name: schedule_ids
in: query
operations:
- name: get-oncall
method: GET
Creates postmortem page.
naftiko: "0.5"
info:
label: "PagerDuty to Confluence Postmortem"
description: "Creates postmortem page."
tags:
- operations
- documentation
- pagerduty
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: pagerduty
port: 8080
tools:
- name: pagerduty-to-confluence-postmortem
description: "Creates postmortem page."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "pagerduty.get-data"
with:
id: "{{input_id}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
title: "PagerDuty to Confluence Postmortem"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "PagerDuty to Confluence Postmortem triggered"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://pagerduty.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "Token token=$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Compares ADP vs Workday.
naftiko: "0.5"
info:
label: "Payroll Audit"
description: "Compares ADP vs Workday."
tags:
- hr
- finance
- adp
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: payroll
port: 8080
tools:
- name: payroll-audit
description: "Compares ADP vs Workday."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "adp.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Payroll Audit"
consumes:
- type: http
namespace: adp
baseUri: "https://adp.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Refreshes and distributes.
naftiko: "0.5"
info:
label: "Power BI Distribution"
description: "Refreshes and distributes."
tags:
- analytics
- reporting
- power-bi
- slack
capability:
exposes:
- type: mcp
namespace: power
port: 8080
tools:
- name: power-bi-distribution
description: "Refreshes and distributes."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "analytics.get-data"
with:
id: "{{input_id}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Power BI Distribution triggered"
consumes:
- type: http
namespace: analytics
baseUri: "https://analytics.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks Power BI dataset refresh.
naftiko: "0.5"
info:
label: "Power BI Refresh Status"
description: "Checks Power BI dataset refresh."
tags:
- analytics
- reporting
- power-bi
capability:
exposes:
- type: mcp
namespace: reporting
port: 8080
tools:
- name: get-refresh
description: "Given dataset ID, return status."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Dataset Id"
call: powerbi.get-refresh
with:
dataset_id: "{{dataset_id}}"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
operations:
- name: get-refresh
method: GET
Posts runbook to Slack.
naftiko: "0.5"
info:
label: "Runbook from PagerDuty"
description: "Posts runbook to Slack."
tags:
- operations
- documentation
- pagerduty
- confluence
- slack
capability:
exposes:
- type: mcp
namespace: runbook
port: 8080
tools:
- name: runbook-from-pagerduty
description: "Posts runbook to Slack."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "pagerduty.get-data"
with:
id: "{{input_id}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
title: "Runbook from PagerDuty"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Runbook from PagerDuty triggered"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://pagerduty.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "Token token=$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates tasks for violations.
naftiko: "0.5"
info:
label: "S3 Compliance Scan"
description: "Creates tasks for violations."
tags:
- security
- compliance
- aws
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: s3
port: 8080
tools:
- name: s3-compliance-scan
description: "Creates tasks for violations."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "aws.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "S3 Compliance Scan"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "S3 Compliance Scan triggered"
consumes:
- type: http
namespace: aws
baseUri: "https://aws.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.aws_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Salesforce opportunity is marked Closed Won, creates a Jira project for implementation delivery and notifies the project management team via Slack.
naftiko: "0.5"
info:
label: "Salesforce Closed Won to Jira Project Creation"
description: "When a Salesforce opportunity is marked Closed Won, creates a Jira project for implementation delivery and notifies the project management team via Slack."
tags:
- sales
- devops
- salesforce
- jira
- slack
- project-management
capability:
exposes:
- type: mcp
namespace: deal-to-delivery
port: 8080
tools:
- name: create-delivery-project
description: "Given a Salesforce Closed Won opportunity ID, fetch deal details and create a Jira implementation project, then notify the delivery team Slack channel. Use when a deal closes to kick off the implementation lifecycle."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID that just closed won."
- name: jira_project_key
in: body
type: string
description: "The Jira project key to create for delivery (e.g., 'IMPL')."
- name: slack_channel
in: body
type: string
description: "Delivery team Slack channel to notify."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: create-jira-epic
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
issuetype: "Epic"
summary: "Implementation: {{get-opportunity.Name}}"
description: "Customer: {{get-opportunity.AccountName}}\nContract Value: {{get-opportunity.Amount}}\nClose Date: {{get-opportunity.CloseDate}}\nSFDC: {{opportunity_id}}"
- name: notify-delivery
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "New Deal Closed: {{get-opportunity.Name}} ({{get-opportunity.Amount}}) — Jira Epic created: {{create-jira-epic.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://oracle.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: jira
baseUri: "https://oracle.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Identifies Salesforce accounts with expiring contracts in the next 90 days that have open P1 support cases and alerts the customer success team via Slack.
naftiko: "0.5"
info:
label: "Salesforce Customer Renewal Risk Alert"
description: "Identifies Salesforce accounts with expiring contracts in the next 90 days that have open P1 support cases and alerts the customer success team via Slack."
tags:
- sales
- customer-success
- salesforce
- slack
- renewal-management
capability:
exposes:
- type: mcp
namespace: renewal-risk
port: 8080
tools:
- name: alert-renewal-risk-accounts
description: "Query Salesforce for accounts with contracts expiring in 90 days that also have open P1 cases. Post at-risk accounts to the customer success Slack channel. Use weekly to prevent undetected renewal risk."
inputParameters:
- name: slack_channel
in: body
type: string
description: "Slack channel for renewal risk alerts (e.g., '#customer-success')."
- name: territory
in: body
type: string
description: "Salesforce territory to scope the query."
steps:
- name: query-at-risk-accounts
type: call
call: "salesforce.query-soql"
with:
q: "SELECT Account.Name, Contract.EndDate, COUNT(Case.Id) FROM Contract WHERE Contract.EndDate = NEXT_N_DAYS:90 AND Account.Territory2.Name = '{{territory}}'"
- name: post-risk-alert
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Renewal Risk Alert — {{territory}}: {{query-at-risk-accounts.totalSize}} accounts have contracts expiring in 90 days. Review in Salesforce for intervention."
consumes:
- type: http
namespace: salesforce
baseUri: "https://oracle.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: soql-query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-soql
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When a Salesforce lead reaches an MQL score threshold, converts it to an opportunity, creates a Jira discovery task, and notifies the assigned sales rep via Slack.
naftiko: "0.5"
info:
label: "Salesforce Lead to Opportunity Conversion"
description: "When a Salesforce lead reaches an MQL score threshold, converts it to an opportunity, creates a Jira discovery task, and notifies the assigned sales rep via Slack."
tags:
- sales
- crm
- salesforce
- jira
- slack
- lead-qualification
capability:
exposes:
- type: mcp
namespace: mql-conversion
port: 8080
tools:
- name: convert-lead-to-opportunity
description: "Given a Salesforce lead ID, fetch lead details, create a converted Salesforce opportunity, open a Jira discovery task, and notify the sales rep on Slack. Use when an inbound MQL is ready for sales handoff."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead ID to convert (18-character SFDC ID)."
- name: jira_project_key
in: body
type: string
description: "The Jira project key for the sales discovery task (e.g., 'SALES')."
- name: sales_rep_slack_id
in: body
type: string
description: "The Slack user ID of the assigned sales representative."
steps:
- name: get-lead
type: call
call: "salesforce.get-lead"
with:
lead_id: "{{lead_id}}"
- name: create-opportunity
type: call
call: "salesforce-opp.create-opportunity"
with:
name: "{{get-lead.Company}} — {{get-lead.ProductInterest__c}}"
stage: "Prospecting"
close_date: "2026-09-30"
- name: create-discovery-task
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
issuetype: "Task"
summary: "Discovery: {{get-lead.Company}} | {{get-lead.FirstName}} {{get-lead.LastName}}"
description: "New MQL converted. Lead: {{lead_id}}. SFDC Opportunity: {{create-opportunity.id}}."
- name: notify-sales-rep
type: call
call: "slack.post-dm"
with:
user_id: "{{sales_rep_slack_id}}"
text: "New Opportunity Created: {{get-lead.Company}} converted from lead. SFDC Opp: {{create-opportunity.id}} | Jira: {{create-discovery-task.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://oracle.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: salesforce-opp
baseUri: "https://oracle.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: jira
baseUri: "https://oracle.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: dm-messages
path: "/chat.postMessage"
operations:
- name: post-dm
method: POST
Fetches all open Salesforce opportunities in the current quarter, aggregates by stage and owner, and posts a pipeline digest to the sales leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Report"
description: "Fetches all open Salesforce opportunities in the current quarter, aggregates by stage and owner, and posts a pipeline digest to the sales leadership Microsoft Teams channel."
tags:
- sales
- crm
- salesforce
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: digest-opportunity-pipeline
description: "Query open Salesforce opportunities for the current quarter, compute pipeline value by stage, and post a digest to the sales leadership Teams channel. Use for weekly pipeline reviews or CRO briefings."
inputParameters:
- name: region
in: body
type: string
description: "Salesforce sales region to filter by (e.g., 'North America', 'EMEA')."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the sales leadership team."
steps:
- name: query-open-opportunities
type: call
call: "salesforce.query-soql"
with:
q: "SELECT Name, StageName, Amount, CloseDate, Owner.Name FROM Opportunity WHERE IsClosed = false AND CloseDate = THIS_QUARTER AND Region__c = '{{region}}'"
- name: post-pipeline-digest
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Pipeline Digest — {{region}} (This Quarter): {{query-open-opportunities.totalSize}} open opportunities. Review full breakdown in Salesforce."
consumes:
- type: http
namespace: salesforce
baseUri: "https://oracle.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: soql-query
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-soql
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves Salesforce opportunity details.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Status"
description: "Retrieves Salesforce opportunity details."
tags:
- crm
- salesforce
- sales
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-opportunity
description: "Given ID, return stage and amount."
inputParameters:
- name: opp_id
in: body
type: string
description: "Opp Id"
call: salesforce.get-opportunity
with:
id: "{{opp_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://oracle.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{id}}"
operations:
- name: get-opportunity
method: GET
Creates Jira project on Closed-Won.
naftiko: "0.5"
info:
label: "Salesforce Won to Jira Project"
description: "Creates Jira project on Closed-Won."
tags:
- crm
- devops
- salesforce
- jira
- slack
capability:
exposes:
- type: mcp
namespace: salesforce
port: 8080
tools:
- name: salesforce-won-to-jira-project
description: "Creates Jira project on Closed-Won."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "salesforce.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Salesforce Won to Jira Project"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Salesforce Won to Jira Project triggered"
consumes:
- type: http
namespace: salesforce
baseUri: "https://salesforce.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Updates with delivery status.
naftiko: "0.5"
info:
label: "SAP Delivery to Salesforce"
description: "Updates with delivery status."
tags:
- erp
- crm
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: sap
port: 8080
tools:
- name: sap-delivery-to-salesforce
description: "Updates with delivery status."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "erp.get-data"
with:
id: "{{input_id}}"
consumes:
- type: http
namespace: erp
baseUri: "https://erp.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.erp_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
Retrieves SAP PO status.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status"
description: "Retrieves SAP PO status."
tags:
- finance
- sap
- procurement
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-po
description: "Given PO number, return status."
inputParameters:
- name: po_number
in: body
type: string
description: "Po Number"
call: sap.get-po
with:
po_number: "{{po_number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://oracle-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: pos
path: "/A_PurchaseOrder('{{po_number}}')"
operations:
- name: get-po
method: GET
Alerts low stock.
naftiko: "0.5"
info:
label: "SAP Stock Alert"
description: "Alerts low stock."
tags:
- erp
- supply-chain
- sap
- slack
capability:
exposes:
- type: mcp
namespace: sap
port: 8080
tools:
- name: sap-stock-alert-to-slack
description: "Alerts low stock."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "erp.get-data"
with:
id: "{{input_id}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "SAP Stock Alert triggered"
consumes:
- type: http
namespace: erp
baseUri: "https://erp.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.erp_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves ServiceNow incident details.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status"
description: "Retrieves ServiceNow incident details."
tags:
- itsm
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: itsm
port: 8080
tools:
- name: get-incident
description: "Given number, return status."
inputParameters:
- name: number
in: body
type: string
description: "Number"
call: servicenow.get-incident
with:
number: "{{number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
Creates a ServiceNow change request for an Oracle Database maintenance patch, including a maintenance window, and notifies the DBA team via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow IT Change Request for Database Patch"
description: "Creates a ServiceNow change request for an Oracle Database maintenance patch, including a maintenance window, and notifies the DBA team via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- database
capability:
exposes:
- type: mcp
namespace: db-change-ops
port: 8080
tools:
- name: create-database-patch-change"
description: "Given database system ID, patch description, and maintenance window, create a ServiceNow change request and notify the DBA team via Microsoft Teams. Use for Oracle Database patching and quarterly critical patch updates (CPU)."
inputParameters:
- name: db_system_id
in: body
type: string
description: "The Oracle Database system identifier being patched (e.g., 'PROD-ODB-01')."
- name: patch_description
in: body
type: string
description: "Description of the database patch or critical patch update."
- name: maintenance_start
in: body
type: string
description: "Maintenance window start in ISO 8601 format."
- name: maintenance_end
in: body
type: string
description: "Maintenance window end in ISO 8601 format."
- name: teams_channel_id
in: body
type: string
description: "Microsoft Teams channel to notify the DBA team."
steps:
- name: create-change-request
type: call
call: "servicenow.create-change-request"
with:
short_description: "Oracle DB patch: {{db_system_id}} — {{patch_description}}"
category: "Database"
planned_start_date: "{{maintenance_start}}"
planned_end_date: "{{maintenance_end}}"
- name: notify-dba-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
text: "Database Maintenance: {{db_system_id}} scheduled for patching from {{maintenance_start}} to {{maintenance_end}}. Change Request: {{create-change-request.number}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
On a P1 ServiceNow incident, creates a Jira escalation issue, posts an alert to PagerDuty, and notifies the incident response Slack channel.
naftiko: "0.5"
info:
label: "ServiceNow P1 Incident Response Chain"
description: "On a P1 ServiceNow incident, creates a Jira escalation issue, posts an alert to PagerDuty, and notifies the incident response Slack channel."
tags:
- itsm
- incident-response
- servicenow
- jira
- pagerduty
- slack
capability:
exposes:
- type: mcp
namespace: incident-response
port: 8080
tools:
- name: handle-p1-incident
description: "Given a ServiceNow P1 incident number, create a Jira escalation issue, trigger a PagerDuty incident, and post a war-room link to the #incidents Slack channel. Use immediately when a production P1 is declared."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow P1 incident number (e.g., 'INC0012345')."
- name: pagerduty_service_id
in: body
type: string
description: "The PagerDuty service ID responsible for the affected system."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
- name: create-jira-escalation
type: call
call: "jira.create-issue"
with:
project_key: "OPS"
issuetype: "Bug"
priority: "Highest"
summary: "[P1] {{get-incident.short_description}}"
description: "ServiceNow P1: {{incident_number}}\n{{get-incident.description}}"
- name: trigger-pagerduty
type: call
call: "pagerduty.create-incident"
with:
service_id: "{{pagerduty_service_id}}"
title: "P1: {{get-incident.short_description}}"
incident_key: "{{incident_number}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "incidents"
text: "P1 INCIDENT: {{incident_number}} | {{get-incident.short_description}} | Jira: {{create-jira-escalation.key}} | PD: {{trigger-pagerduty.incident_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://oracle.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: jira
baseUri: "https://oracle.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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Posts message to Slack channel.
naftiko: "0.5"
info:
label: "Slack Message Poster"
description: "Posts message to Slack channel."
tags:
- communication
- slack
- notifications
capability:
exposes:
- type: mcp
namespace: messaging
port: 8080
tools:
- name: post-message
description: "Given channel and text, post."
inputParameters:
- name: channel
in: body
type: string
description: "Channel"
call: slack.post-message
with:
channel: "{{channel}}"
consumes:
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Queries Snowflake account usage for credit consumption by warehouse and posts the cost report to the FinOps Slack channel.
naftiko: "0.5"
info:
label: "Snowflake Cloud Data Warehouse Cost Report"
description: "Queries Snowflake account usage for credit consumption by warehouse and posts the cost report to the FinOps Slack channel."
tags:
- finops
- data
- snowflake
- slack
- cost-management
capability:
exposes:
- type: mcp
namespace: cloud-finops
port: 8080
tools:
- name: report-warehouse-costs
description: "Query Snowflake credit consumption by virtual warehouse over a given date range and post the cost summary to the FinOps Slack channel. Use for weekly or monthly cloud cost reviews."
inputParameters:
- name: start_date
in: body
type: string
description: "Report start date in ISO 8601 format (YYYY-MM-DD)."
- name: end_date
in: body
type: string
description: "Report end date in ISO 8601 format (YYYY-MM-DD)."
- name: slack_channel
in: body
type: string
description: "Slack channel for the cost report (e.g., '#finops')."
steps:
- name: query-credit-usage
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT WAREHOUSE_NAME, SUM(CREDITS_USED) as TOTAL_CREDITS FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY WHERE START_TIME BETWEEN '{{start_date}}' AND '{{end_date}}' GROUP BY WAREHOUSE_NAME ORDER BY TOTAL_CREDITS DESC"
- name: post-cost-report
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Snowflake Cost Report ({{start_date}} to {{end_date}}): Query executed. Review warehouse credit consumption for cost optimization opportunities."
consumes:
- type: http
namespace: snowflake
baseUri: "https://oracle.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Alerts on credit overage.
naftiko: "0.5"
info:
label: "Snowflake Cost Alert"
description: "Alerts on credit overage."
tags:
- data
- finops
- snowflake
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: snowflake
port: 8080
tools:
- name: snowflake-cost-to-finops
description: "Alerts on credit overage."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "data.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Snowflake Cost Alert"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Snowflake Cost Alert triggered"
consumes:
- type: http
namespace: data
baseUri: "https://data.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.data_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Executes a SQL data quality assertion against a Snowflake analytics table and blocks downstream pipeline runs by posting a fail alert to Slack.
naftiko: "0.5"
info:
label: "Snowflake Data Quality Gate for Analytics Pipeline"
description: "Executes a SQL data quality assertion against a Snowflake analytics table and blocks downstream pipeline runs by posting a fail alert to Slack."
tags:
- data
- analytics
- snowflake
- slack
- data-quality
capability:
exposes:
- type: mcp
namespace: analytics-quality
port: 8080
tools:
- name: run-analytics-data-check
description: "Execute a SQL data quality assertion against a Snowflake analytics table and post pass/fail results to Slack. Use as a gate before loading data into Oracle Analytics or BI dashboards."
inputParameters:
- name: table_name
in: body
type: string
description: "Fully-qualified Snowflake table name (e.g., 'ANALYTICS_DB.SALES.OPPORTUNITY_FACTS')."
- name: sql_assertion
in: body
type: string
description: "The SQL quality assertion to execute. Should return 0 rows on pass."
- name: slack_channel
in: body
type: string
description: "Slack channel to post quality results to."
steps:
- name: execute-assertion
type: call
call: "snowflake.execute-statement"
with:
statement: "{{sql_assertion}}"
- name: post-result
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Data Quality Check on {{table_name}}: Assertion executed. Review results — statement handle: {{execute-assertion.statementHandle}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://oracle.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates Jira task for data anomalies.
naftiko: "0.5"
info:
label: "Snowflake Data Quality to Jira"
description: "Creates Jira task for data anomalies."
tags:
- data
- quality
- snowflake
- jira
- slack
capability:
exposes:
- type: mcp
namespace: snowflake
port: 8080
tools:
- name: snowflake-quality-to-jira
description: "Creates Jira task for data anomalies."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "data.get-data"
with:
id: "{{input_id}}"
- name: create-issue
type: call
call: "jira.create-issue"
with:
summary: "Snowflake Data Quality to Jira"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Snowflake Data Quality to Jira triggered"
consumes:
- type: http
namespace: data
baseUri: "https://data.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.data_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: jira
baseUri: "https://oracle-jira.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Executes read-only SQL against Snowflake.
naftiko: "0.5"
info:
label: "Snowflake Query Runner"
description: "Executes read-only SQL against Snowflake."
tags:
- data
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: run-query
description: "Given SQL, execute query."
inputParameters:
- name: sql
in: body
type: string
description: "Sql"
call: snowflake.execute-query
with:
statement: "{{sql}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://oracle.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Creates incident for down.
naftiko: "0.5"
info:
label: "SolarWinds to PagerDuty"
description: "Creates incident for down."
tags:
- networking
- incident-response
- solarwinds
- pagerduty
- servicenow
capability:
exposes:
- type: mcp
namespace: solarwinds
port: 8080
tools:
- name: solarwinds-to-pagerduty
description: "Creates incident for down."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "solarwinds.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "SolarWinds to PagerDuty"
consumes:
- type: http
namespace: solarwinds
baseUri: "https://solarwinds.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.solarwinds_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Creates security incident from Splunk.
naftiko: "0.5"
info:
label: "Splunk Alert to Security Incident"
description: "Creates security incident from Splunk."
tags:
- security
- siem
- splunk
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: splunk
port: 8080
tools:
- name: splunk-alert-to-security-incident
description: "Creates security incident from Splunk."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "splunk.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Splunk Alert to Security Incident"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Splunk Alert to Security Incident triggered"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Executes Splunk SPL query.
naftiko: "0.5"
info:
label: "Splunk Search Runner"
description: "Executes Splunk SPL query."
tags:
- security
- observability
- splunk
capability:
exposes:
- type: mcp
namespace: log-analysis
port: 8080
tools:
- name: run-search
description: "Given SPL query, execute."
inputParameters:
- name: query
in: body
type: string
description: "Query"
call: splunk.create-search
with:
search: "{{query}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.oracle.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
Creates incident for failures.
naftiko: "0.5"
info:
label: "Tableau to ServiceNow"
description: "Creates incident for failures."
tags:
- analytics
- itsm
- tableau
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: tableau
port: 8080
tools:
- name: tableau-failure-to-incident
description: "Creates incident for failures."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "analytics.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Tableau to ServiceNow"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "#alerts"
text: "Tableau to ServiceNow triggered"
consumes:
- type: http
namespace: analytics
baseUri: "https://analytics.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates page from transcript.
naftiko: "0.5"
info:
label: "Teams to Confluence"
description: "Creates page from transcript."
tags:
- communication
- documentation
- microsoft-teams
- confluence
capability:
exposes:
- type: mcp
namespace: teams
port: 8080
tools:
- name: teams-to-confluence
description: "Creates page from transcript."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "microsoft-teams.get-data"
with:
id: "{{input_id}}"
- name: create-page
type: call
call: "confluence.create-page"
with:
title: "Teams to Confluence"
consumes:
- type: http
namespace: microsoft-teams
baseUri: "https://microsoft-teams.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.microsoft_teams_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: confluence
baseUri: "https://oracle-wiki.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
Triggers a Terraform Cloud run for an infrastructure workspace, monitors for plan completion, and requires a ServiceNow change approval before applying.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Provisioning Gate"
description: "Triggers a Terraform Cloud run for an infrastructure workspace, monitors for plan completion, and requires a ServiceNow change approval before applying."
tags:
- cloud
- infrastructure
- terraform
- servicenow
- change-management
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: gate-terraform-apply
description: "Given a Terraform Cloud workspace ID and ServiceNow change number, verify the change request is approved and trigger the Terraform apply. Use as a deployment gate for Oracle Cloud infrastructure changes."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID to apply (e.g., 'ws-abc123')."
- name: change_number
in: body
type: string
description: "The ServiceNow change request number authorizing this infrastructure change."
steps:
- name: check-change-approval
type: call
call: "servicenow.get-change-request"
with:
number: "{{change_number}}"
- name: trigger-terraform-run
type: call
call: "terraform.create-run"
with:
workspace_id: "{{workspace_id}}"
is_destroy: "false"
message: "Authorized by change request {{change_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
inputParameters:
- name: number
in: query
operations:
- name: get-change-request
method: GET
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
Retrieves Terraform Cloud cost estimate for a pending run and posts the projected infrastructure spend to the FinOps Slack channel for review.
naftiko: "0.5"
info:
label: "Terraform Cloud Workspace Cost Estimation"
description: "Retrieves Terraform Cloud cost estimate for a pending run and posts the projected infrastructure spend to the FinOps Slack channel for review."
tags:
- cloud
- finops
- terraform
- slack
- cost-management
capability:
exposes:
- type: mcp
namespace: infra-cost
port: 8080
tools:
- name: review-terraform-cost-estimate
description: "Given a Terraform Cloud run ID, fetch the cost estimate for the planned infrastructure changes and post the projected monthly cost to the FinOps Slack channel. Use before applying large infrastructure changes."
inputParameters:
- name: run_id
in: body
type: string
description: "The Terraform Cloud run ID with a completed cost estimate (e.g., 'run-abc123')."
- name: slack_channel
in: body
type: string
description: "Slack channel for the cost estimate review (e.g., '#finops')."
steps:
- name: get-cost-estimate
type: call
call: "terraform.get-run-cost-estimate"
with:
run_id: "{{run_id}}"
- name: post-estimate
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Terraform Cost Estimate: Run {{run_id}} | Projected monthly cost: {{get-cost-estimate.proposed_monthly_cost}} | Delta: {{get-cost-estimate.delta_monthly_cost}}. Approve or reject the run in Terraform Cloud."
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs/{{run_id}}/cost-estimate"
inputParameters:
- name: run_id
in: path
operations:
- name: get-run-cost-estimate
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates change for Terraform plan.
naftiko: "0.5"
info:
label: "Terraform Plan to Change"
description: "Creates change for Terraform plan."
tags:
- infrastructure
- itsm
- terraform
- servicenow
capability:
exposes:
- type: mcp
namespace: terraform
port: 8080
tools:
- name: terraform-plan-to-change
description: "Creates change for Terraform plan."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "infrastructure.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Terraform Plan to Change"
consumes:
- type: http
namespace: infrastructure
baseUri: "https://infrastructure.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.infrastructure_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Retrieves Terraform workspace state.
naftiko: "0.5"
info:
label: "Terraform Workspace Status"
description: "Retrieves Terraform workspace state."
tags:
- infrastructure
- terraform
- cloud
capability:
exposes:
- type: mcp
namespace: infra
port: 8080
tools:
- name: get-workspace
description: "Given workspace, return status."
inputParameters:
- name: workspace
in: body
type: string
description: "Workspace"
call: terraform.get-workspace
with:
workspace: "{{workspace}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/oracle/workspaces/{{workspace}}"
operations:
- name: get-workspace
method: GET
Generates a compensation band distribution report by department and job family from Workday and publishes it to Confluence for the compensation committee.
naftiko: "0.5"
info:
label: "Workday Compensation Band Audit Report"
description: "Generates a compensation band distribution report by department and job family from Workday and publishes it to Confluence for the compensation committee."
tags:
- hr
- compensation
- workday
- confluence
- reporting
capability:
exposes:
- type: mcp
namespace: comp-audit
port: 8080
tools:
- name: publish-compensation-audit
description: "Fetch compensation band distribution by department from Workday and publish the report to Confluence for the compensation committee. Use for annual pay equity reviews or board compensation reporting."
inputParameters:
- name: business_unit
in: body
type: string
description: "Oracle business unit to scope the compensation report (e.g., 'Cloud Infrastructure')."
- name: confluence_space_key
in: body
type: string
description: "Confluence space key for the compensation report."
- name: confluence_parent_id
in: body
type: string
description: "Confluence parent page ID for the report."
steps:
- name: get-compensation-data
type: call
call: "workday.get-compensation-summary"
with:
business_unit: "{{business_unit}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space_key}}"
parent_page_id: "{{confluence_parent_id}}"
title: "Compensation Band Audit — {{business_unit}}"
content: "Workday compensation band distribution for {{business_unit}}. Total employees in scope: {{get-compensation-data.total}}. Report generated for compensation committee review."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation-workers
path: "/oracle/workers"
inputParameters:
- name: business_unit
in: query
operations:
- name: get-compensation-summary
method: GET
- type: http
namespace: confluence
baseUri: "https://oracle.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves employee profile from Workday HCM.
naftiko: "0.5"
info:
label: "Workday Employee Lookup"
description: "Retrieves employee profile from Workday HCM."
tags:
- hr
- workday
- employee-data
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee
description: "Given worker ID, return profile."
inputParameters:
- name: worker_id
in: body
type: string
description: "Worker Id"
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/oracle/workers/{{worker_id}}"
operations:
- name: get-worker
method: GET
Loads headcount snapshot.
naftiko: "0.5"
info:
label: "Workday Headcount to Snowflake"
description: "Loads headcount snapshot."
tags:
- hr
- data
- workday
- snowflake
capability:
exposes:
- type: mcp
namespace: workday
port: 8080
tools:
- name: workday-headcount-to-snowflake
description: "Loads headcount snapshot."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "data.get-data"
with:
id: "{{input_id}}"
consumes:
- type: http
namespace: data
baseUri: "https://data.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.data_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
Provisions Okta for new hires.
naftiko: "0.5"
info:
label: "Workday New Hire to Okta"
description: "Provisions Okta for new hires."
tags:
- hr
- security
- workday
- okta
- onboarding
capability:
exposes:
- type: mcp
namespace: workday
port: 8080
tools:
- name: workday-new-hire-to-okta
description: "Provisions Okta for new hires."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "workday.get-data"
with:
id: "{{input_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://workday.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
Fetches payroll journal totals from Workday and cross-references against the Snowflake financial data warehouse to validate period accuracy.
naftiko: "0.5"
info:
label: "Workday Payroll Journal to Snowflake Reconciliation"
description: "Fetches payroll journal totals from Workday and cross-references against the Snowflake financial data warehouse to validate period accuracy."
tags:
- finance
- payroll
- workday
- snowflake
- reconciliation
capability:
exposes:
- type: mcp
namespace: payroll-reconciliation
port: 8080
tools:
- name: reconcile-payroll-journals
description: "Fetch payroll journal totals for a given pay period from Workday and compare against the Snowflake financial data warehouse. Post reconciliation status to the finance Slack channel. Use at month-end close."
inputParameters:
- name: pay_period
in: body
type: string
description: "Pay period identifier in YYYY-MM format (e.g., '2026-03')."
- name: slack_channel
in: body
type: string
description: "Finance Slack channel for reconciliation status."
steps:
- name: get-workday-journals
type: call
call: "workday.get-payroll-journals"
with:
pay_period: "{{pay_period}}"
- name: get-snowflake-totals
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT SUM(AMOUNT) as TOTAL FROM FINANCIAL_DW.PUBLIC.PAYROLL_JOURNAL WHERE PAY_PERIOD = '{{pay_period}}'"
- name: post-reconciliation-status
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Payroll Reconciliation {{pay_period}}: Workday journals fetched, Snowflake query complete. Please validate totals in the finance portal."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: payroll-results
path: "/oracle/payrollResults"
inputParameters:
- name: pay_period
in: query
operations:
- name: get-payroll-journals
method: GET
- type: http
namespace: snowflake
baseUri: "https://oracle.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches all employees due for performance review from Workday and creates Jira tasks for their managers, notifying the HR team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Kickoff"
description: "Fetches all employees due for performance review from Workday and creates Jira tasks for their managers, notifying the HR team via Microsoft Teams."
tags:
- hr
- performance-management
- workday
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: perf-review
port: 8080
tools:
- name: kickoff-performance-reviews
description: "Fetch employees due for review from Workday, create manager Jira tasks, and notify HR via Microsoft Teams. Use to kick off Oracle's annual or mid-year performance review cycles."
inputParameters:
- name: review_cycle_name
in: body
type: string
description: "Name of the review cycle (e.g., 'FY2026 Annual Review')."
- name: jira_project_key
in: body
type: string
description: "Jira project key for performance review tasks (e.g., 'HR')."
- name: hr_teams_channel_id
in: body
type: string
description: "Microsoft Teams channel ID for the HR organization."
steps:
- name: get-review-eligible
type: call
call: "workday.list-workers"
with:
review_cycle: "{{review_cycle_name}}"
- name: create-jira-tasks
type: call
call: "jira.create-issue"
with:
project_key: "{{jira_project_key}}"
issuetype: "Task"
summary: "Performance Review Cycle Kickoff: {{review_cycle_name}}"
description: "All managers: please complete performance reviews in Workday for the {{review_cycle_name}} cycle by the deadline."
- name: notify-hr
type: call
call: "msteams.post-channel-message"
with:
channel_id: "{{hr_teams_channel_id}}"
text: "Performance review cycle '{{review_cycle_name}}' kicked off. Manager tasks created in Jira: {{create-jira-tasks.key}}."
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: "/oracle/workers"
inputParameters:
- name: review_cycle
in: query
operations:
- name: list-workers
method: GET
- type: http
namespace: jira
baseUri: "https://oracle.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
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When an employee's role changes in Workday, updates their Okta group memberships to reflect the new access requirements.
naftiko: "0.5"
info:
label: "Workday Role Change and Okta Group Sync"
description: "When an employee's role changes in Workday, updates their Okta group memberships to reflect the new access requirements."
tags:
- hr
- identity
- workday
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: role-access-sync
port: 8080
tools:
- name: sync-role-access-change
description: "Given a Workday employee ID, old Okta group ID, and new Okta group ID, remove the user from the old access group and add to the new one. Use when an Oracle employee is promoted or transfers between teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID of the employee whose role changed."
- name: old_okta_group_id
in: body
type: string
description: "The Okta group ID for the previous role's access."
- name: new_okta_group_id
in: body
type: string
description: "The Okta group ID for the new role's access."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: remove-old-group
type: call
call: "okta-remove.remove-user-from-group"
with:
group_id: "{{old_okta_group_id}}"
user_id: "{{get-employee.okta_user_id}}"
- name: add-new-group
type: call
call: "okta-add.add-user-to-group"
with:
group_id: "{{new_okta_group_id}}"
user_id: "{{get-employee.okta_user_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/oracle/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta-remove
baseUri: "https://oracle.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-users
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: remove-user-from-group
method: DELETE
- type: http
namespace: okta-add
baseUri: "https://oracle.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-users
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: add-user-to-group
method: PUT
Syncs groups on role change.
naftiko: "0.5"
info:
label: "Workday Role to Okta Groups"
description: "Syncs groups on role change."
tags:
- hr
- security
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: workday
port: 8080
tools:
- name: workday-role-to-okta-groups
description: "Syncs groups on role change."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "workday.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Workday Role to Okta Groups"
consumes:
- type: http
namespace: workday
baseUri: "https://workday.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST
Deactivates Okta user on Workday termination and creates ServiceNow task.
naftiko: "0.5"
info:
label: "Workday Termination to Okta Deprovisioning"
description: "Deactivates Okta user on Workday termination and creates ServiceNow task."
tags:
- hr
- security
- workday
- okta
- servicenow
- offboarding
capability:
exposes:
- type: mcp
namespace: workday
port: 8080
tools:
- name: workday-termination-to-okta-deprovisioning
description: "Deactivates Okta user on Workday termination and creates ServiceNow task."
inputParameters:
- name: input_id
in: body
type: string
description: "Input identifier."
steps:
- name: get-data
type: call
call: "workday.get-data"
with:
id: "{{input_id}}"
- name: create-record
type: call
call: "servicenow.create-record"
with:
short_description: "Workday Termination to Okta Deprovisioning"
consumes:
- type: http
namespace: workday
baseUri: "https://workday.oracle.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: data
path: "/data"
operations:
- name: get-data
method: GET
- type: http
namespace: servicenow
baseUri: "https://oracle.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/table/incident"
operations:
- name: create-record
method: POST