General Electric Capabilities
Naftiko 0.5 capability definitions for General Electric - 103 capabilities showing integration workflows and service orchestrations.
Retrieves the payroll summary for a specified pay period from ADP.
naftiko: "0.5"
info:
label: "ADP Payroll Summary Lookup"
description: "Retrieves the payroll summary for a specified pay period from ADP."
tags:
- hr
- payroll
- adp
capability:
exposes:
- type: mcp
namespace: payroll-summary
port: 8080
tools:
- name: get-payroll-summary
description: "Given a pay period ID, return the payroll totals including gross pay, deductions, and net pay. Use when payroll administrators need period summaries."
inputParameters:
- name: pay_period_id
in: body
type: string
description: "The ADP pay period identifier."
call: "adp-api.get-summary"
with:
pay_period_id: "{{pay_period_id}}"
outputParameters:
- name: gross_pay
type: number
mapping: "$.summary.gross_pay"
- name: total_deductions
type: number
mapping: "$.summary.deductions"
- name: net_pay
type: number
mapping: "$.summary.net_pay"
consumes:
- type: http
namespace: adp-api
baseUri: "https://api.adp.com/payroll/v1"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/pay-periods/{{pay_period_id}}/summary"
inputParameters:
- name: pay_period_id
in: path
operations:
- name: get-summary
method: GET
Traces an aviation part through its lifecycle by querying SAP for procurement data, the quality inspection record, and the installation history, then logs findings in Confluence.
naftiko: "0.5"
info:
label: "Aviation Parts Traceability Chain"
description: "Traces an aviation part through its lifecycle by querying SAP for procurement data, the quality inspection record, and the installation history, then logs findings in Confluence."
tags:
- aviation
- quality-management
- sap
- confluence
capability:
exposes:
- type: mcp
namespace: parts-trace
port: 8080
tools:
- name: trace-aviation-part
description: "Given a part serial number, trace its full lifecycle from procurement to installation. Use when quality engineers need to conduct part traceability audits."
inputParameters:
- name: serial_number
in: body
type: string
description: "The aviation part serial number."
steps:
- name: get-procurement
type: call
call: "sap-api.get-part-procurement"
with:
serial_number: "{{serial_number}}"
- name: get-inspection
type: call
call: "sap-qm.get-part-inspection"
with:
serial_number: "{{serial_number}}"
- name: get-installation
type: call
call: "sap-pm.get-installation-record"
with:
serial_number: "{{serial_number}}"
- name: log-trace
type: call
call: "confluence-api.create-page"
with:
space: "AVIATION-QA"
title: "Traceability: {{serial_number}}"
body: "Supplier: {{get-procurement.supplier}}. PO: {{get-procurement.po_number}}. Inspection: {{get-inspection.status}}. Installed on: {{get-installation.equipment_id}} ({{get-installation.install_date}})."
consumes:
- type: http
namespace: sap-api
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: parts-procurement
path: "/serialNumbers/{{serial_number}}/procurement"
inputParameters:
- name: serial_number
in: path
operations:
- name: get-part-procurement
method: GET
- type: http
namespace: sap-qm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: inspections
path: "/serialNumbers/{{serial_number}}/inspection"
inputParameters:
- name: serial_number
in: path
operations:
- name: get-part-inspection
method: GET
- type: http
namespace: sap-pm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: installations
path: "/serialNumbers/{{serial_number}}/installation"
inputParameters:
- name: serial_number
in: path
operations:
- name: get-installation-record
method: GET
- type: http
namespace: confluence-api
baseUri: "https://ge-engineering.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
Generates a monthly AWS cost optimization report by querying AWS Cost Explorer, identifying unused resources, and publishing findings to Confluence and Teams.
naftiko: "0.5"
info:
label: "AWS Cost Optimization Report Generator"
description: "Generates a monthly AWS cost optimization report by querying AWS Cost Explorer, identifying unused resources, and publishing findings to Confluence and Teams."
tags:
- cloud-operations
- cost-management
- aws
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: aws-cost-report
port: 8080
tools:
- name: generate-cost-report
description: "Given a billing month, analyze AWS spend and identify optimization opportunities. Use when cloud operations runs monthly cost reviews."
inputParameters:
- name: billing_month
in: body
type: string
description: "The billing month in YYYY-MM format."
steps:
- name: get-costs
type: call
call: "aws-ce.get-cost-and-usage"
with:
month: "{{billing_month}}"
- name: get-idle-resources
type: call
call: "aws-ce.get-rightsizing-recommendations"
with:
month: "{{billing_month}}"
- name: publish-report
type: call
call: "confluence-api.create-page"
with:
space: "CLOUD-OPS"
title: "AWS Cost Report — {{billing_month}}"
body: "Total spend: ${{get-costs.total}}. Rightsizing savings: ${{get-idle-resources.estimated_savings}}."
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
channel_id: "cloud-finops"
text: "AWS Cost Report for {{billing_month}} published. Total: ${{get-costs.total}}. Potential savings: ${{get-idle-resources.estimated_savings}}."
consumes:
- type: http
namespace: aws-ce
baseUri: "https://ce.us-east-1.amazonaws.com"
authentication:
type: aws_sigv4
accessKey: "$secrets.aws_access_key"
resources:
- name: cost-usage
path: "/"
operations:
- name: get-cost-and-usage
method: POST
- name: get-rightsizing-recommendations
method: POST
- type: http
namespace: confluence-api
baseUri: "https://ge-engineering.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-cloud/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Audits Azure AD conditional access policies by listing all policies, checking for non-compliant configurations, and generating an audit record in ServiceNow.
naftiko: "0.5"
info:
label: "Azure AD Conditional Access Policy Audit"
description: "Audits Azure AD conditional access policies by listing all policies, checking for non-compliant configurations, and generating an audit record in ServiceNow."
tags:
- security
- compliance
- azure-ad
- servicenow
capability:
exposes:
- type: mcp
namespace: ca-audit
port: 8080
tools:
- name: audit-conditional-access
description: "Given a policy scope, audit conditional access configurations and document findings. Use when security conducts periodic access policy reviews."
inputParameters:
- name: scope
in: body
type: string
description: "The audit scope (e.g., all, high-risk, guest)."
steps:
- name: list-policies
type: call
call: "azure-ad.list-ca-policies"
with:
scope: "{{scope}}"
- name: check-compliance
type: call
call: "azure-ad.evaluate-policy-compliance"
with:
policies: "{{list-policies.policy_ids}}"
- name: create-audit
type: call
call: "servicenow.create-audit-record"
with:
type: "conditional_access_audit"
scope: "{{scope}}"
total_policies: "{{list-policies.count}}"
non_compliant: "{{check-compliance.non_compliant_count}}"
findings: "{{check-compliance.findings}}"
consumes:
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: policies
path: "/identity/conditionalAccess/policies"
inputParameters:
- name: scope
in: query
operations:
- name: list-ca-policies
method: GET
- name: evaluate-policy-compliance
method: POST
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: audit
path: "/table/u_compliance_audit"
operations:
- name: create-audit-record
method: POST
Lists all members of privileged Azure AD groups for GE quarterly access reviews and writes results to a SharePoint audit list.
naftiko: "0.5"
info:
label: "Azure AD Privileged Access Review"
description: "Lists all members of privileged Azure AD groups for GE quarterly access reviews and writes results to a SharePoint audit list."
tags:
- identity
- security
- azure-ad
- access-review
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-privileged-access-review
description: "Given an Azure AD privileged group ID and SharePoint site and list IDs, retrieve all current group members and write them to the SharePoint access review list. Use quarterly for privileged access certification."
inputParameters:
- name: group_id
in: body
type: string
description: "The Azure AD group ID to audit."
- name: sharepoint_site_id
in: body
type: string
description: "The SharePoint site ID to write results to."
- name: sharepoint_list_id
in: body
type: string
description: "The SharePoint list ID for the review records."
steps:
- name: list-members
type: call
call: "azure-ad-review.list-group-members"
with:
group_id: "{{group_id}}"
- name: write-audit-record
type: call
call: "sharepoint-review.create-list-item"
with:
site_id: "{{sharepoint_site_id}}"
list_id: "{{sharepoint_list_id}}"
members: "{{list-members.value}}"
consumes:
- type: http
namespace: azure-ad-review
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: group-members
path: "/groups/{{group_id}}/members"
inputParameters:
- name: group_id
in: path
operations:
- name: list-group-members
method: GET
- type: http
namespace: sharepoint-review
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: list-items
path: "/sites/{{site_id}}/lists/{{list_id}}/items"
inputParameters:
- name: site_id
in: path
- name: list_id
in: path
operations:
- name: create-list-item
method: POST
Retrieves Azure AD user access details for GE including group memberships, role assignments, and last sign-in timestamp.
naftiko: "0.5"
info:
label: "Azure AD User Access Review"
description: "Retrieves Azure AD user access details for GE including group memberships, role assignments, and last sign-in timestamp."
tags:
- identity
- security
- azure-active-directory
capability:
exposes:
- type: mcp
namespace: identity
port: 8080
tools:
- name: get-user-access
description: "Given a user principal name, retrieve group memberships, directory roles, and last sign-in."
inputParameters:
- name: user_upn
in: body
type: string
description: "Azure AD user principal name."
call: "azuread.get-user"
with:
upn: "{{user_upn}}"
outputParameters:
- name: group_count
type: number
mapping: "$.memberOf.length"
- name: last_sign_in
type: string
mapping: "$.signInActivity.lastSignInDateTime"
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{upn}}?$expand=memberOf&$select=displayName,signInActivity"
inputParameters:
- name: upn
in: path
operations:
- name: get-user
method: GET
Queries Azure Cost Management for subscription spend anomalies and posts an alert to the GE FinOps Microsoft Teams channel when thresholds are exceeded.
naftiko: "0.5"
info:
label: "Azure Cost Anomaly Alert Handler"
description: "Queries Azure Cost Management for subscription spend anomalies and posts an alert to the GE FinOps Microsoft Teams channel when thresholds are exceeded."
tags:
- cloud
- finops
- azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cloud-cost-ops
port: 8080
tools:
- name: handle-cost-anomaly
description: "Given an Azure subscription ID and a spend threshold, query Azure Cost Management for current period spend and post an alert to the FinOps Teams channel if the threshold is exceeded. Use when responding to Azure cost anomaly notifications."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID to audit."
- name: threshold_usd
in: body
type: number
description: "Spend threshold in USD; alert fires when current spend exceeds this."
steps:
- name: get-spend
type: call
call: "azure-cost-mgmt.query-usage"
with:
subscription_id: "{{subscription_id}}"
- name: alert-finops
type: call
call: "msteams-cost.send-message"
with:
channel_id: "$secrets.teams_finops_channel_id"
text: "Azure Cost Alert — Subscription {{subscription_id}} spend {{get-spend.total_cost}} {{get-spend.currency}} has crossed the ${{threshold_usd}} threshold. Review billing dashboard."
consumes:
- type: http
namespace: azure-cost-mgmt
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_management_token"
resources:
- name: cost-query
path: "/{{subscription_id}}/providers/Microsoft.CostManagement/query"
inputParameters:
- name: subscription_id
in: path
operations:
- name: query-usage
method: POST
- type: http
namespace: msteams-cost
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the latest build status for a specified Azure DevOps pipeline.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status Check"
description: "Retrieves the latest build status for a specified Azure DevOps pipeline."
tags:
- ci-cd
- devops
- azure-devops
capability:
exposes:
- type: mcp
namespace: build-status
port: 8080
tools:
- name: check-build
description: "Given a pipeline ID and project name, return the latest build result and timestamp. Use when release managers need to verify build readiness."
inputParameters:
- name: project
in: body
type: string
description: "The Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "The pipeline definition ID."
call: "azdo-api.get-build"
with:
project: "{{project}}"
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: build_number
type: string
mapping: "$.value[0].buildNumber"
- name: result
type: string
mapping: "$.value[0].result"
- name: finish_time
type: string
mapping: "$.value[0].finishTime"
consumes:
- type: http
namespace: azdo-api
baseUri: "https://dev.azure.com/ge-digital"
authentication:
type: bearer
token: "$secrets.azure_devops_pat"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds"
inputParameters:
- name: project
in: path
- name: pipeline_id
in: query
operations:
- name: get-build
method: GET
Executes a KQL query against an Azure Log Analytics workspace and returns results.
naftiko: "0.5"
info:
label: "Azure Log Analytics Query Runner"
description: "Executes a KQL query against an Azure Log Analytics workspace and returns results."
tags:
- monitoring
- log-analytics
- azure-log-analytics
capability:
exposes:
- type: mcp
namespace: log-query
port: 8080
tools:
- name: run-query
description: "Given a workspace ID and KQL query string, execute the query and return results. Use when platform engineers need to investigate log patterns."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Azure Log Analytics workspace ID."
- name: query
in: body
type: string
description: "The KQL query to execute."
call: "loganalytics-api.execute-query"
with:
workspace_id: "{{workspace_id}}"
query: "{{query}}"
outputParameters:
- name: row_count
type: integer
mapping: "$.tables[0].rows.length"
- name: columns
type: string
mapping: "$.tables[0].columns"
consumes:
- type: http
namespace: loganalytics-api
baseUri: "https://api.loganalytics.io/v1"
authentication:
type: bearer
token: "$secrets.azure_log_token"
resources:
- name: query
path: "/workspaces/{{workspace_id}}/query"
inputParameters:
- name: workspace_id
in: path
- name: query
in: body
operations:
- name: execute-query
method: POST
Deploys a trained machine learning model by registering it in Azure ML, deploying to an AKS endpoint, running validation tests, and notifying the data science team.
naftiko: "0.5"
info:
label: "Azure Machine Learning Model Deployment Pipeline"
description: "Deploys a trained machine learning model by registering it in Azure ML, deploying to an AKS endpoint, running validation tests, and notifying the data science team."
tags:
- machine-learning
- deployment
- azure-machine-learning
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ml-deploy
port: 8080
tools:
- name: deploy-ml-model
description: "Given a model name and version, deploy it to production and validate. Use when data scientists approve a model for production deployment."
inputParameters:
- name: model_name
in: body
type: string
description: "The Azure ML model name."
- name: model_version
in: body
type: string
description: "The model version to deploy."
steps:
- name: register-model
type: call
call: "azureml-api.register-model"
with:
model_name: "{{model_name}}"
version: "{{model_version}}"
- name: deploy-endpoint
type: call
call: "azureml-api.create-deployment"
with:
model_id: "{{register-model.model_id}}"
endpoint_name: "{{model_name}}-prod"
- name: run-validation
type: call
call: "azureml-api.test-endpoint"
with:
endpoint_name: "{{model_name}}-prod"
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
channel_id: "data-science"
text: "Model {{model_name}} v{{model_version}} deployed. Validation: {{run-validation.status}}. Latency: {{run-validation.avg_latency_ms}}ms."
consumes:
- type: http
namespace: azureml-api
baseUri: "https://ge-ml.api.azureml.ms/modelmanagement/v2.0"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: models
path: "/models"
operations:
- name: register-model
method: POST
- name: deployments
path: "/deployments"
operations:
- name: create-deployment
method: POST
- name: endpoints
path: "/endpoints/{{endpoint_name}}/test"
inputParameters:
- name: endpoint_name
in: path
operations:
- name: test-endpoint
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-data-science/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Searches Box for engineering files matching a query string within a specified folder.
naftiko: "0.5"
info:
label: "Box Engineering File Search"
description: "Searches Box for engineering files matching a query string within a specified folder."
tags:
- document-management
- engineering
- box
capability:
exposes:
- type: mcp
namespace: file-search
port: 8080
tools:
- name: search-files
description: "Given a search query and folder ID, return matching files from Box. Use when engineers need to find CAD files or technical specs."
inputParameters:
- name: query
in: body
type: string
description: "The search query string."
- name: folder_id
in: body
type: string
description: "The Box folder ID to search within."
call: "box-api.search"
with:
query: "{{query}}"
folder_id: "{{folder_id}}"
outputParameters:
- name: total_count
type: integer
mapping: "$.total_count"
- name: first_result_name
type: string
mapping: "$.entries[0].name"
- name: first_result_id
type: string
mapping: "$.entries[0].id"
consumes:
- type: http
namespace: box-api
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: query
in: query
- name: folder_id
in: query
operations:
- name: search
method: GET
Searches Confluence for an engineering runbook by title keyword and returns the page content.
naftiko: "0.5"
info:
label: "Confluence Engineering Runbook Lookup"
description: "Searches Confluence for an engineering runbook by title keyword and returns the page content."
tags:
- documentation
- engineering
- confluence
capability:
exposes:
- type: mcp
namespace: runbook-search
port: 8080
tools:
- name: search-runbook
description: "Given a keyword, search Confluence for matching engineering runbook pages. Use when on-call engineers need to find troubleshooting procedures."
inputParameters:
- name: keyword
in: body
type: string
description: "The search keyword for the runbook title."
call: "confluence-api.search-content"
with:
keyword: "{{keyword}}"
outputParameters:
- name: page_id
type: string
mapping: "$.results[0].id"
- name: title
type: string
mapping: "$.results[0].title"
- name: url
type: string
mapping: "$.results[0]._links.webui"
consumes:
- type: http
namespace: confluence-api
baseUri: "https://ge-engineering.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
inputParameters:
- name: keyword
in: query
operations:
- name: search-content
method: GET
When a Salesforce case is escalated, retrieves the account health score, creates a P1 incident in ServiceNow, assigns the account executive from Workday, and alerts leadership via Teams.
naftiko: "0.5"
info:
label: "Customer Escalation Response Chain"
description: "When a Salesforce case is escalated, retrieves the account health score, creates a P1 incident in ServiceNow, assigns the account executive from Workday, and alerts leadership via Teams."
tags:
- customer-service
- sales
- salesforce
- servicenow
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: escalation-chain
port: 8080
tools:
- name: handle-customer-escalation
description: "Given a Salesforce case ID, coordinate the escalation response across all systems. Use when a customer case is escalated to critical priority."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID."
steps:
- name: get-case
type: call
call: "salesforce-api.get-case"
with:
case_id: "{{case_id}}"
- name: get-account-health
type: call
call: "salesforce-api.get-account-health"
with:
account_id: "{{get-case.account_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
priority: "1"
short_description: "Customer escalation: {{get-case.subject}}"
customer: "{{get-case.account_name}}"
- name: get-ae
type: call
call: "workday-api.get-account-executive"
with:
account_id: "{{get-case.account_id}}"
- name: alert-leadership
type: call
call: "msteams.send-channel-message"
with:
channel_id: "customer-escalations"
text: "ESCALATION: {{get-case.account_name}} — {{get-case.subject}}. Health score: {{get-account-health.score}}. AE: {{get-ae.name}}. P1 ticket: {{create-incident.number}}."
consumes:
- type: http
namespace: salesforce-api
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- name: accounts
path: "/sobjects/Account/{{account_id}}/health"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account-health
method: GET
- type: http
namespace: servicenow
baseUri: "https://ge.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: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: ae
path: "/ge/accountExecutives"
inputParameters:
- name: account_id
in: query
operations:
- name: get-account-executive
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-leadership/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries Datadog APM for the p99 latency of a specified service over the last hour.
naftiko: "0.5"
info:
label: "Datadog APM Service Latency Check"
description: "Queries Datadog APM for the p99 latency of a specified service over the last hour."
tags:
- monitoring
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: apm-latency
port: 8080
tools:
- name: check-latency
description: "Given a Datadog service name, return the p99 latency metric for the past hour. Use when SREs need to assess service performance."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog APM service name."
call: "datadog-apm.get-latency"
with:
service_name: "{{service_name}}"
outputParameters:
- name: p99_latency_ms
type: number
mapping: "$.series[0].pointlist[-1][1]"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: datadog-apm
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: service_name
in: query
operations:
- name: get-latency
method: GET
Queries Datadog for microservice health metrics across GE's cloud platforms including latency, error rate, and throughput.
naftiko: "0.5"
info:
label: "Datadog Microservice Health Check"
description: "Queries Datadog for microservice health metrics across GE's cloud platforms including latency, error rate, and throughput."
tags:
- monitoring
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: observability
port: 8080
tools:
- name: get-service-health
description: "Given a service name, retrieve latency, error rate, and request throughput from GE's Datadog."
inputParameters:
- name: service_name
in: body
type: string
description: "Service name."
call: "datadog.query-metrics"
with:
service_name: "{{service_name}}"
outputParameters:
- name: avg_latency_ms
type: number
mapping: "$.series[0].pointlist[-1][1]"
- name: error_rate_pct
type: number
mapping: "$.series[1].pointlist[-1][1]"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
When a Datadog SLO breaches its error budget, creates a Jira incident ticket, pulls the on-call from PagerDuty, and posts an alert to the SRE Teams channel.
naftiko: "0.5"
info:
label: "Datadog SLO Breach to Jira Escalation"
description: "When a Datadog SLO breaches its error budget, creates a Jira incident ticket, pulls the on-call from PagerDuty, and posts an alert to the SRE Teams channel."
tags:
- sre
- monitoring
- datadog
- jira
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: slo-breach
port: 8080
tools:
- name: handle-slo-breach
description: "Given a Datadog SLO ID and breach percentage, create an incident and escalate to the on-call engineer. Use when SLO error budgets are exhausted."
inputParameters:
- name: slo_id
in: body
type: string
description: "The Datadog SLO identifier."
- name: breach_pct
in: body
type: number
description: "The percentage of error budget consumed."
steps:
- name: get-slo-details
type: call
call: "datadog-api.get-slo"
with:
slo_id: "{{slo_id}}"
- name: get-oncall
type: call
call: "pagerduty-api.get-oncall"
with:
service_id: "{{get-slo-details.service_id}}"
- name: create-incident
type: call
call: "jira-api.create-issue"
with:
project: "SRE"
issue_type: "Bug"
summary: "SLO breach: {{get-slo-details.name}} — {{breach_pct}}% budget consumed"
assignee: "{{get-oncall.user_id}}"
priority: "High"
- name: notify-sre
type: call
call: "msteams.send-channel-message"
with:
channel_id: "sre-alerts"
text: "SLO BREACH: {{get-slo-details.name}} at {{breach_pct}}% error budget. On-call: {{get-oncall.user_name}}. Jira: {{create-incident.key}}."
consumes:
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "$secrets.datadog_api_key"
resources:
- name: slos
path: "/slo/{{slo_id}}"
inputParameters:
- name: slo_id
in: path
operations:
- name: get-slo
method: GET
- type: http
namespace: pagerduty-api
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
inputParameters:
- name: service_id
in: query
operations:
- name: get-oncall
method: GET
- type: http
namespace: jira-api
baseUri: "https://ge-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-sre/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When Dynatrace detects high CPU utilization on infrastructure hosts, triggers an Azure auto-scale action and notifies the platform team via Teams.
naftiko: "0.5"
info:
label: "Dynatrace Infrastructure Scaling Trigger"
description: "When Dynatrace detects high CPU utilization on infrastructure hosts, triggers an Azure auto-scale action and notifies the platform team via Teams."
tags:
- monitoring
- infrastructure
- dynatrace
- azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-scaling
port: 8080
tools:
- name: trigger-auto-scale
description: "Given a Dynatrace host group ID and CPU threshold, initiate scaling and notify the team. Use when infrastructure monitoring detects sustained high utilization."
inputParameters:
- name: host_group_id
in: body
type: string
description: "The Dynatrace host group identifier."
- name: cpu_threshold
in: body
type: number
description: "The CPU utilization threshold percentage."
steps:
- name: get-host-metrics
type: call
call: "dynatrace-api.get-host-group-metrics"
with:
host_group_id: "{{host_group_id}}"
- name: scale-up
type: call
call: "azure-api.trigger-vmss-scale"
with:
vmss_name: "{{get-host-metrics.vmss_name}}"
target_count: "{{get-host-metrics.recommended_count}}"
- name: notify-platform
type: call
call: "msteams.send-channel-message"
with:
channel_id: "platform-ops"
text: "Auto-scale triggered for {{get-host-metrics.vmss_name}}. CPU was {{get-host-metrics.avg_cpu}}%. Scaling to {{get-host-metrics.recommended_count}} instances."
consumes:
- type: http
namespace: dynatrace-api
baseUri: "https://ge-digital.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: metrics
path: "/metrics/query"
inputParameters:
- name: host_group_id
in: query
operations:
- name: get-host-group-metrics
method: GET
- type: http
namespace: azure-api
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: vmss
path: "/subscriptions/ge-sub/resourceGroups/ge-infra/providers/Microsoft.Compute/virtualMachineScaleSets/{{vmss_name}}/scale"
inputParameters:
- name: vmss_name
in: path
operations:
- name: trigger-vmss-scale
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-platform/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a termination is confirmed in Workday, disables the Azure AD account, opens a ServiceNow offboarding ticket, and notifies IT Security via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When a termination is confirmed in Workday, disables the Azure AD account, opens a ServiceNow offboarding ticket, and notifies IT Security via Microsoft Teams."
tags:
- hr
- offboarding
- workday
- azure-ad
- servicenow
- identity
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday employee ID and termination date, disable the Azure AD account, open a ServiceNow offboarding ticket, and alert IT Security via Teams. Use immediately upon confirmed GE employee separation."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: termination_date
in: body
type: string
description: "The employee's last working day in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday-off.get-worker"
with:
worker_id: "{{employee_id}}"
- name: disable-ad-account
type: call
call: "azure-ad-off.disable-user"
with:
user_id: "{{get-worker.azure_object_id}}"
- name: open-offboard-ticket
type: call
call: "servicenow-off.create-incident"
with:
category: "hr_offboarding"
short_description: "Offboarding: {{get-worker.full_name}} — last day {{termination_date}}"
assignment_group: "IT_Security"
consumes:
- type: http
namespace: workday-off
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/ge/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: azure-ad-off
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: users
path: "/users/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: servicenow-off
baseUri: "https://ge.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
When a new hire is created in Workday, opens a ServiceNow IT onboarding ticket, provisions an Azure AD account, 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 IT onboarding ticket, provisions an Azure AD account, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- azure-ad
- 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, Azure AD, and Microsoft Teams. Use when a new GE hire is confirmed and IT provisioning must begin."
inputParameters:
- name: 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 YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-ad-account
type: call
call: "azure-ad.create-user"
with:
display_name: "{{get-employee.full_name}}"
department: "{{get-employee.department}}"
- name: open-it-ticket
type: call
call: "servicenow.create-incident"
with:
category: "hr_onboarding"
short_description: "New hire IT setup: {{get-employee.full_name}} — start {{start_date}}"
assignment_group: "IT_Onboarding"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to GE, {{get-employee.first_name}}! Your IT ticket is {{open-it-ticket.number}}. Your start date is {{start_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/ge/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
When a GitHub Actions workflow fails on a main branch, opens a Jira bug and posts an alert to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub Actions CI Failure Handler"
description: "When a GitHub Actions workflow fails on a main branch, opens a Jira bug and posts an alert to the engineering Microsoft Teams channel."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-cicd
port: 8080
tools:
- name: handle-github-failure
description: "Given a GitHub workflow run failure event, create a Jira Bug issue and post an engineering alert to Microsoft Teams. Use when a GitHub Actions workflow fails on the main or release branch."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: workflow_name
in: body
type: string
description: "The name of the failed GitHub Actions workflow."
- name: run_id
in: body
type: string
description: "The GitHub Actions run ID."
- name: branch
in: body
type: string
description: "The branch the workflow ran on."
- name: run_url
in: body
type: string
description: "Direct URL to the failed workflow run."
steps:
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI] {{repo}} / {{branch}} — {{workflow_name}} failed"
description: "GitHub Actions run {{run_id}} failed on {{branch}}.\nRepo: {{repo}}\nWorkflow: {{workflow_name}}\nRun URL: {{run_url}}"
- name: notify-engineering
type: call
call: "msteams-cicd.send-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "CI Failure: {{repo}} ({{branch}}) — {{workflow_name}} | Jira: {{create-jira-bug.key}} | Run: {{run_url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://ge.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-cicd
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a GitHub pull request is merged, triggers a Terraform Cloud run, monitors the apply status, and posts the deployment result to the engineering Teams channel.
naftiko: "0.5"
info:
label: "GitHub PR Merge to Deployment Pipeline"
description: "When a GitHub pull request is merged, triggers a Terraform Cloud run, monitors the apply status, and posts the deployment result to the engineering Teams channel."
tags:
- ci-cd
- infrastructure
- github
- terraform
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pr-deploy
port: 8080
tools:
- name: handle-pr-merge-deploy
description: "Given a GitHub repository and PR number, trigger the infrastructure deployment pipeline and notify the team. Use when merged PRs should auto-deploy infrastructure changes."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: pr_number
in: body
type: integer
description: "The pull request number."
steps:
- name: get-pr-details
type: call
call: "github-api.get-pull-request"
with:
repo: "{{repo}}"
pr_number: "{{pr_number}}"
- name: trigger-terraform
type: call
call: "terraform-api.create-run"
with:
workspace_id: "ge-infra-prod"
message: "Auto-deploy from PR #{{pr_number}}: {{get-pr-details.title}}"
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
channel_id: "platform-engineering"
text: "Deployment triggered for PR #{{pr_number}} ({{get-pr-details.title}}). Terraform run: {{trigger-terraform.run_id}}. Status: {{trigger-terraform.status}}."
consumes:
- type: http
namespace: github-api
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/{{repo}}/pulls/{{pr_number}}"
inputParameters:
- name: repo
in: path
- name: pr_number
in: path
operations:
- name: get-pull-request
method: GET
- type: http
namespace: terraform-api
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: create-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-digital/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Triggered on a GitHub pull request, fetches the latest code scanning alerts for the repository and posts a security summary to the PR as a comment.
naftiko: "0.5"
info:
label: "GitHub Pull Request Security Scan Gate"
description: "Triggered on a GitHub pull request, fetches the latest code scanning alerts for the repository and posts a security summary to the PR as a comment."
tags:
- devops
- security
- github
- code-scanning
capability:
exposes:
- type: mcp
namespace: security-gate
port: 8080
tools:
- name: post-security-scan-summary
description: "Given a GitHub repository and pull request number, fetch all open code scanning alerts and post a summary comment on the PR. Use as a pre-merge security gate in GE engineering workflows."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: pr_number
in: body
type: integer
description: "The pull request number to comment on."
steps:
- name: get-alerts
type: call
call: "github-security.list-code-scanning-alerts"
with:
repo: "{{repo}}"
state: "open"
- name: post-pr-comment
type: call
call: "github-pr.create-pr-comment"
with:
repo: "{{repo}}"
pr_number: "{{pr_number}}"
body: "Security Scan Summary: {{get-alerts.total_count}} open alert(s) found. Review before merging."
consumes:
- type: http
namespace: github-security
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: code-scanning-alerts
path: "/repos/{{repo}}/code-scanning/alerts"
inputParameters:
- name: repo
in: path
- name: state
in: query
operations:
- name: list-code-scanning-alerts
method: GET
- type: http
namespace: github-pr
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pr-comments
path: "/repos/{{repo}}/issues/{{pr_number}}/comments"
inputParameters:
- name: repo
in: path
- name: pr_number
in: path
operations:
- name: create-pr-comment
method: POST
Fetches merged pull requests since the last GitHub release for a GE repository and posts a structured release summary to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "GitHub Release Notes Generator"
description: "Fetches merged pull requests since the last GitHub release for a GE repository and posts a structured release summary to the engineering Microsoft Teams channel."
tags:
- devops
- github
- microsoft-teams
- release-management
capability:
exposes:
- type: mcp
namespace: release-ops
port: 8080
tools:
- name: generate-release-notes
description: "Given a GitHub repository and base/head tag, fetch all merged PRs in the range and post a release notes summary to the engineering Teams channel. Use when preparing a production release."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: base_tag
in: body
type: string
description: "The base release tag to compare from (e.g., v2.0.0)."
- name: head_tag
in: body
type: string
description: "The head tag or branch to compare to (e.g., v2.1.0)."
steps:
- name: compare-releases
type: call
call: "github-releases.compare-commits"
with:
repo: "{{repo}}"
base: "{{base_tag}}"
head: "{{head_tag}}"
- name: post-release-notes
type: call
call: "msteams-release.send-message"
with:
channel_id: "$secrets.teams_engineering_channel_id"
text: "Release Notes for {{repo}} ({{base_tag}} → {{head_tag}}): {{compare-releases.total_commits}} commits, {{compare-releases.files_changed}} files changed. Review PRs before deployment."
consumes:
- type: http
namespace: github-releases
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: commit-comparison
path: "/repos/{{repo}}/compare/{{base}}...{{head}}"
inputParameters:
- name: repo
in: path
- name: base
in: path
- name: head
in: path
operations:
- name: compare-commits
method: GET
- type: http
namespace: msteams-release
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Fetches all critical Dependabot security alerts across GE GitHub repositories and creates Jira issues for each unresolved critical vulnerability.
naftiko: "0.5"
info:
label: "GitHub Repository Security Alert Triage"
description: "Fetches all critical Dependabot security alerts across GE GitHub repositories and creates Jira issues for each unresolved critical vulnerability."
tags:
- security
- devops
- github
- jira
capability:
exposes:
- type: mcp
namespace: security-triage
port: 8080
tools:
- name: triage-dependabot-alerts
description: "Given a GitHub repository, fetch all open critical Dependabot alerts and create a Jira security issue for each. Use during security triage cycles or in response to vulnerability disclosure events."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: jira_project_key
in: body
type: string
description: "The Jira project key for security issues (e.g., SEC)."
steps:
- name: get-alerts
type: call
call: "github-vuln.list-dependabot-alerts"
with:
repo: "{{repo}}"
severity: "critical"
state: "open"
- name: create-jira-issue
type: call
call: "jira-sec.create-issue"
with:
project_key: "{{jira_project_key}}"
issuetype: "Security"
summary: "Critical Dependabot alerts in {{repo}}: {{get-alerts.total_count}} unresolved"
description: "Repository: {{repo}}\nOpen critical alerts: {{get-alerts.total_count}}\nReview at: https://github.com/{{repo}}/security/dependabot"
consumes:
- type: http
namespace: github-vuln
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/repos/{{repo}}/dependabot/alerts"
inputParameters:
- name: repo
in: path
- name: severity
in: query
- name: state
in: query
operations:
- name: list-dependabot-alerts
method: GET
- type: http
namespace: jira-sec
baseUri: "https://ge.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When GitHub Advanced Security detects a critical vulnerability, enriches it with the CVE database, creates a Jira remediation ticket, and notifies the security team via Teams.
naftiko: "0.5"
info:
label: "GitHub Security Scan to Remediation Workflow"
description: "When GitHub Advanced Security detects a critical vulnerability, enriches it with the CVE database, creates a Jira remediation ticket, and notifies the security team via Teams."
tags:
- security
- devops
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vuln-remediation
port: 8080
tools:
- name: handle-critical-vulnerability
description: "Given a GitHub repository and alert number, triage the vulnerability and create remediation tasks. Use when Dependabot or CodeQL finds a critical security issue."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: alert_number
in: body
type: integer
description: "The security alert number."
steps:
- name: get-alert
type: call
call: "github-api.get-security-alert"
with:
repo: "{{repo}}"
alert_number: "{{alert_number}}"
- name: create-remediation
type: call
call: "jira-api.create-issue"
with:
project: "SEC"
issue_type: "Bug"
summary: "CVE {{get-alert.cve_id}}: {{get-alert.summary}} in {{repo}}"
priority: "Critical"
description: "Severity: {{get-alert.severity}}. Package: {{get-alert.package}}. Fix version: {{get-alert.patched_version}}."
- name: notify-security
type: call
call: "msteams.send-channel-message"
with:
channel_id: "security-alerts"
text: "CRITICAL VULN: {{get-alert.cve_id}} in {{repo}}. Package: {{get-alert.package}}. Jira: {{create-remediation.key}}."
consumes:
- type: http
namespace: github-api
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: alerts
path: "/repos/{{repo}}/dependabot/alerts/{{alert_number}}"
inputParameters:
- name: repo
in: path
- name: alert_number
in: path
operations:
- name: get-security-alert
method: GET
- type: http
namespace: jira-api
baseUri: "https://ge-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-security/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Pulls campaign performance data from Google Analytics, calculates ROI against spend from SAP, refreshes the Power BI marketing dashboard, and sends the summary to Teams.
naftiko: "0.5"
info:
label: "Google Analytics Campaign ROI to Power BI"
description: "Pulls campaign performance data from Google Analytics, calculates ROI against spend from SAP, refreshes the Power BI marketing dashboard, and sends the summary to Teams."
tags:
- marketing
- analytics
- google-analytics
- sap
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: campaign-roi
port: 8080
tools:
- name: generate-campaign-roi
description: "Given a campaign ID and date range, calculate marketing ROI and update dashboards. Use when marketing needs to assess campaign effectiveness."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The Google Analytics campaign ID."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
steps:
- name: get-ga-data
type: call
call: "ga-api.get-campaign-report"
with:
campaign_id: "{{campaign_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: get-spend
type: call
call: "sap-co.get-marketing-spend"
with:
campaign_id: "{{campaign_id}}"
period_start: "{{start_date}}"
period_end: "{{end_date}}"
- name: refresh-dashboard
type: call
call: "powerbi-api.refresh-dataset"
with:
dataset_id: "marketing-roi"
- name: send-summary
type: call
call: "msteams.send-channel-message"
with:
channel_id: "marketing-analytics"
text: "Campaign {{campaign_id}} ROI: Revenue ${{get-ga-data.revenue}}, Spend ${{get-spend.total}}. Conversions: {{get-ga-data.conversions}}."
consumes:
- type: http
namespace: ga-api
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/ge-property/runReport"
operations:
- name: get-campaign-report
method: POST
- type: http
namespace: sap-co
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: cost-objects
path: "/marketingCostObjects/{{campaign_id}}/spend"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-marketing-spend
method: GET
- type: http
namespace: powerbi-api
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-marketing/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a HubSpot form submission generates a marketing qualified lead, enriches it via ZoomInfo, creates a Salesforce lead, and notifies the sales team.
naftiko: "0.5"
info:
label: "HubSpot Marketing Lead to Salesforce Sync"
description: "When a HubSpot form submission generates a marketing qualified lead, enriches it via ZoomInfo, creates a Salesforce lead, and notifies the sales team."
tags:
- marketing
- lead-management
- hubspot
- zoominfo
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lead-sync
port: 8080
tools:
- name: sync-marketing-lead
description: "Given a HubSpot contact ID, enrich and sync the lead to Salesforce. Use when marketing qualified leads need to be handed off to sales."
inputParameters:
- name: contact_id
in: body
type: string
description: "The HubSpot contact ID."
steps:
- name: get-contact
type: call
call: "hubspot-api.get-contact"
with:
contact_id: "{{contact_id}}"
- name: enrich-lead
type: call
call: "zoominfo-api.enrich-contact"
with:
email: "{{get-contact.email}}"
company: "{{get-contact.company}}"
- name: create-lead
type: call
call: "salesforce-api.create-lead"
with:
first_name: "{{get-contact.first_name}}"
last_name: "{{get-contact.last_name}}"
email: "{{get-contact.email}}"
company: "{{get-contact.company}}"
title: "{{enrich-lead.title}}"
- name: notify-sales
type: call
call: "msteams.send-channel-message"
with:
channel_id: "sales-leads"
text: "New MQL: {{get-contact.first_name}} {{get-contact.last_name}} from {{get-contact.company}}. SFDC lead: {{create-lead.id}}."
consumes:
- type: http
namespace: hubspot-api
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: zoominfo-api
baseUri: "https://api.zoominfo.com/lookup/v1"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: contacts
path: "/contact/enrich"
operations:
- name: enrich-contact
method: POST
- type: http
namespace: salesforce-api
baseUri: "https://ge.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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-sales/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves engineering backlog status from GE's Jira instance including open issue counts, velocity, and sprint progress.
naftiko: "0.5"
info:
label: "Jira Engineering Backlog Status"
description: "Retrieves engineering backlog status from GE's Jira instance including open issue counts, velocity, and sprint progress."
tags:
- engineering
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: engineering
port: 8080
tools:
- name: get-backlog-status
description: "Given a Jira project key, retrieve open issues, sprint velocity, and progress metrics."
inputParameters:
- name: project_key
in: body
type: string
description: "Jira project key."
call: "jira.search-issues"
with:
project_key: "{{project_key}}"
outputParameters:
- name: total_open
type: number
mapping: "$.total"
consumes:
- type: http
namespace: jira
baseUri: "https://ge.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: search
path: "/search?jql=project={{project_key}} AND status!=Done"
inputParameters:
- name: project_key
in: query
operations:
- name: search-issues
method: GET
Retrieves the current status and assignee of a Jira issue by key.
naftiko: "0.5"
info:
label: "Jira Issue Status Lookup"
description: "Retrieves the current status and assignee of a Jira issue by key."
tags:
- project-management
- engineering
- jira
capability:
exposes:
- type: mcp
namespace: issue-lookup
port: 8080
tools:
- name: get-issue
description: "Given a Jira issue key, return the issue summary, status, and assignee. Use when project managers need a quick status check on a ticket."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key (e.g., GE-1234)."
call: "jira-api.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
consumes:
- type: http
namespace: jira-api
baseUri: "https://ge-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Validates release readiness by checking Jira for open blockers, verifying test coverage in Azure DevOps, and posting the release gate status to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Jira Release Readiness Gate"
description: "Validates release readiness by checking Jira for open blockers, verifying test coverage in Azure DevOps, and posting the release gate status to the engineering Teams channel."
tags:
- release-management
- ci-cd
- jira
- azure-devops
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: release-gate
port: 8080
tools:
- name: check-release-readiness
description: "Given a Jira release version, validate all quality gates before approving the release. Use when release managers need to assess go/no-go for a deployment."
inputParameters:
- name: project
in: body
type: string
description: "The Jira project key."
- name: version
in: body
type: string
description: "The Jira fix version."
steps:
- name: check-blockers
type: call
call: "jira-api.search-issues"
with:
jql: "project={{project}} AND fixVersion={{version}} AND type=Bug AND priority=Blocker AND status!=Done"
- name: check-tests
type: call
call: "azdo-api.get-test-results"
with:
project: "{{project}}"
build_tag: "{{version}}"
- name: post-gate-status
type: call
call: "msteams.send-channel-message"
with:
channel_id: "release-management"
text: "Release Gate for {{project}} v{{version}}: Open blockers: {{check-blockers.total}}. Test pass rate: {{check-tests.pass_rate}}%. Gate: {{check-blockers.total == 0 ? 'GO' : 'NO-GO'}}."
consumes:
- type: http
namespace: jira-api
baseUri: "https://ge-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: azdo-api
baseUri: "https://dev.azure.com/ge-digital"
authentication:
type: bearer
token: "$secrets.azure_devops_pat"
resources:
- name: test-results
path: "/{{project}}/_apis/test/runs"
inputParameters:
- name: project
in: path
- name: build_tag
in: query
operations:
- name: get-test-results
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-engineering/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Fetches all open Jira issues in the current sprint for a GE engineering project and posts a backlog health summary to the team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Backlog Status Digest"
description: "Fetches all open Jira issues in the current sprint for a GE engineering project and posts a backlog health summary to the team's Microsoft Teams channel."
tags:
- devops
- jira
- microsoft-teams
- reporting
- engineering
capability:
exposes:
- type: mcp
namespace: jira-reporting
port: 8080
tools:
- name: digest-sprint-backlog
description: "Given a Jira project key and Teams channel, fetch all open sprint issues grouped by status and post a backlog health summary. Use for daily stand-up preparation or sprint review briefings."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key (e.g., ENG, GEVRNV)."
- name: channel_id
in: body
type: string
description: "The Microsoft Teams channel ID to post the digest to."
steps:
- name: get-sprint-issues
type: call
call: "jira-sprint.search-issues"
with:
jql: "project={{project_key}} AND sprint in openSprints() ORDER BY status ASC"
- name: post-digest
type: call
call: "msteams-jira.send-message"
with:
channel_id: "{{channel_id}}"
text: "Sprint Backlog ({{project_key}}): {{get-sprint-issues.total}} open issues — To Do: {{get-sprint-issues.todo_count}}, In Progress: {{get-sprint-issues.inprogress_count}}, In Review: {{get-sprint-issues.review_count}}."
consumes:
- type: http
namespace: jira-sprint
baseUri: "https://ge.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issue-search
path: "/search"
inputParameters:
- name: jql
in: query
operations:
- name: search-issues
method: GET
- type: http
namespace: msteams-jira
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates a weekly talent engagement digest by pulling LinkedIn recruiter analytics, matching against open Workday requisitions, and posting the summary to the recruiting Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Talent Engagement Digest"
description: "Generates a weekly talent engagement digest by pulling LinkedIn recruiter analytics, matching against open Workday requisitions, and posting the summary to the recruiting Teams channel."
tags:
- recruiting
- talent-acquisition
- linkedin
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: talent-digest
port: 8080
tools:
- name: generate-talent-digest
description: "Given a date range, compile LinkedIn sourcing metrics and match to open positions. Use when talent acquisition needs weekly pipeline visibility."
inputParameters:
- name: start_date
in: body
type: string
description: "The start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "The end date in YYYY-MM-DD format."
steps:
- name: get-linkedin-metrics
type: call
call: "linkedin-api.get-recruiter-analytics"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: get-open-reqs
type: call
call: "workday-api.list-open-requisitions"
with:
status: "open"
- name: post-digest
type: call
call: "msteams.send-channel-message"
with:
channel_id: "recruiting-updates"
text: "Weekly Talent Digest ({{start_date}} to {{end_date}}): {{get-linkedin-metrics.inmails_sent}} InMails sent, {{get-linkedin-metrics.responses}} responses. Open reqs: {{get-open-reqs.count}}."
consumes:
- type: http
namespace: linkedin-api
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: analytics
path: "/recruiterAnalytics"
inputParameters:
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: get-recruiter-analytics
method: GET
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/ge/jobRequisitions"
inputParameters:
- name: status
in: query
operations:
- name: list-open-requisitions
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-recruiting/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a social media crisis is detected, pulls engagement data from Meta, creates a crisis management case in ServiceNow, and alerts the communications team via Teams.
naftiko: "0.5"
info:
label: "Meta Social Media Crisis Response"
description: "When a social media crisis is detected, pulls engagement data from Meta, creates a crisis management case in ServiceNow, and alerts the communications team via Teams."
tags:
- communications
- crisis-management
- meta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: social-crisis
port: 8080
tools:
- name: handle-social-crisis
description: "Given a Meta post ID with negative engagement spike, initiate the crisis response workflow. Use when social media monitoring detects a reputation-impacting incident."
inputParameters:
- name: post_id
in: body
type: string
description: "The Meta post ID."
- name: platform
in: body
type: string
description: "The platform (facebook or instagram)."
steps:
- name: get-engagement
type: call
call: "meta-api.get-post-insights"
with:
post_id: "{{post_id}}"
platform: "{{platform}}"
- name: create-crisis-case
type: call
call: "servicenow.create-case"
with:
category: "crisis_management"
priority: "1"
short_description: "Social media crisis: {{platform}} post {{post_id}}"
- name: alert-comms
type: call
call: "msteams.send-channel-message"
with:
channel_id: "crisis-management"
text: "SOCIAL MEDIA ALERT: {{platform}} post {{post_id}} has {{get-engagement.negative_reactions}} negative reactions. Crisis case: {{create-crisis-case.number}}."
consumes:
- type: http
namespace: meta-api
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_token"
resources:
- name: insights
path: "/{{post_id}}/insights"
inputParameters:
- name: post_id
in: path
operations:
- name: get-post-insights
method: GET
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-comms/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries Microsoft Graph for current GE Microsoft 365 license assignments and consumption, used for IT cost allocation and compliance reporting.
naftiko: "0.5"
info:
label: "Microsoft 365 License Utilization Report"
description: "Queries Microsoft Graph for current GE Microsoft 365 license assignments and consumption, used for IT cost allocation and compliance reporting."
tags:
- identity
- microsoft-365
- reporting
- it-finance
capability:
exposes:
- type: mcp
namespace: m365-licensing
port: 8080
tools:
- name: get-license-utilization
description: "Query Microsoft Graph for Microsoft 365 subscribed SKUs and their consumed unit counts. Use for monthly IT license chargeback, compliance audits, and renewal planning."
call: "msgraph-lic.get-subscribed-skus"
outputParameters:
- name: skus
type: array
mapping: "$.value"
consumes:
- type: http
namespace: msgraph-lic
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: subscribed-skus
path: "/subscribedSkus"
operations:
- name: get-subscribed-skus
method: GET
Posts a formatted message to a specified Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Message Poster"
description: "Posts a formatted message to a specified Microsoft Teams channel."
tags:
- communications
- collaboration
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: teams-poster
port: 8080
tools:
- name: post-message
description: "Given a team ID, channel ID, and message text, post the message to the Teams channel. Use when automated workflows need to notify a team channel."
inputParameters:
- name: team_id
in: body
type: string
description: "The Microsoft Teams team ID."
- name: channel_id
in: body
type: string
description: "The Teams channel ID."
- name: message
in: body
type: string
description: "The message text to post."
call: "msteams-api.post-channel-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
message: "{{message}}"
outputParameters:
- name: message_id
type: string
mapping: "$.id"
- name: created_at
type: string
mapping: "$.createdDateTime"
consumes:
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a new hire is confirmed in Workday, checks their role requirements, creates a ServiceNow equipment request, and tracks delivery via SAP logistics.
naftiko: "0.5"
info:
label: "New Hire IT Equipment Provisioning"
description: "When a new hire is confirmed in Workday, checks their role requirements, creates a ServiceNow equipment request, and tracks delivery via SAP logistics."
tags:
- hr
- it-operations
- workday
- servicenow
- sap
capability:
exposes:
- type: mcp
namespace: equip-provision
port: 8080
tools:
- name: provision-equipment
description: "Given a Workday employee ID, determine their equipment needs and initiate provisioning. Use when IT needs to prepare hardware for incoming employees."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
- name: start_date
in: body
type: string
description: "The employee start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday-api.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-request
type: call
call: "servicenow.create-request"
with:
category: "hardware"
short_description: "Equipment for {{get-employee.full_name}} starting {{start_date}}"
role: "{{get-employee.job_title}}"
location: "{{get-employee.location}}"
- name: create-delivery-order
type: call
call: "sap-logistics.create-delivery"
with:
destination: "{{get-employee.location}}"
items: "standard-{{get-employee.job_profile}}"
delivery_date: "{{start_date}}"
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/ge/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: sap-logistics
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: deliveries
path: "/deliveryOrders"
operations:
- name: create-delivery
method: POST
Queries New Relic for the current error rate percentage of a specified application.
naftiko: "0.5"
info:
label: "New Relic Application Error Rate"
description: "Queries New Relic for the current error rate percentage of a specified application."
tags:
- monitoring
- observability
- new-relic
capability:
exposes:
- type: mcp
namespace: error-rate
port: 8080
tools:
- name: get-error-rate
description: "Given a New Relic application ID, return the current error rate and throughput. Use when SREs need to assess application health."
inputParameters:
- name: app_id
in: body
type: string
description: "The New Relic application ID."
call: "newrelic-api.get-error-rate"
with:
app_id: "{{app_id}}"
outputParameters:
- name: error_rate
type: number
mapping: "$.application.error_rate"
- name: throughput
type: number
mapping: "$.application.throughput"
consumes:
- type: http
namespace: newrelic-api
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apikey
key: "$secrets.newrelic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-error-rate
method: GET
Launches an access certification campaign by pulling active assignments from Okta, comparing against Workday org data, and creating review tasks in ServiceNow for managers.
naftiko: "0.5"
info:
label: "Okta User Access Certification Campaign"
description: "Launches an access certification campaign by pulling active assignments from Okta, comparing against Workday org data, and creating review tasks in ServiceNow for managers."
tags:
- security
- identity-management
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: access-cert
port: 8080
tools:
- name: launch-certification
description: "Given a department and application scope, create access review tasks for managers. Use when security launches quarterly user access certifications."
inputParameters:
- name: department
in: body
type: string
description: "The department to certify."
- name: app_scope
in: body
type: string
description: "The application scope (e.g., all, critical, privileged)."
steps:
- name: get-assignments
type: call
call: "okta-api.list-app-assignments"
with:
department: "{{department}}"
scope: "{{app_scope}}"
- name: get-org-data
type: call
call: "workday-api.get-department-roster"
with:
department: "{{department}}"
- name: create-review-tasks
type: call
call: "servicenow.create-certification-tasks"
with:
department: "{{department}}"
assignment_count: "{{get-assignments.count}}"
active_employees: "{{get-org-data.headcount}}"
consumes:
- type: http
namespace: okta-api
baseUri: "https://ge.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_token"
resources:
- name: assignments
path: "/apps/assignments"
inputParameters:
- name: department
in: query
- name: scope
in: query
operations:
- name: list-app-assignments
method: GET
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: departments
path: "/ge/departments/{{department}}/roster"
inputParameters:
- name: department
in: path
operations:
- name: get-department-roster
method: GET
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: certifications
path: "/table/u_access_certification"
operations:
- name: create-certification-tasks
method: POST
Generates an accounts receivable aging report from Oracle EBS, identifies overdue accounts, creates collection tasks in Salesforce, and notifies the finance team via Teams.
naftiko: "0.5"
info:
label: "Oracle AR Aging Report to Collections Workflow"
description: "Generates an accounts receivable aging report from Oracle EBS, identifies overdue accounts, creates collection tasks in Salesforce, and notifies the finance team via Teams."
tags:
- finance
- accounts-receivable
- oracle
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ar-collections
port: 8080
tools:
- name: run-ar-collections
description: "Given an aging threshold in days, identify overdue invoices and initiate collections. Use when finance runs weekly collections reviews."
inputParameters:
- name: aging_days
in: body
type: integer
description: "The minimum number of days overdue to include."
- name: business_unit
in: body
type: string
description: "The Oracle business unit."
steps:
- name: get-aging-report
type: call
call: "oracle-ebs.get-ar-aging"
with:
aging_days: "{{aging_days}}"
business_unit: "{{business_unit}}"
- name: create-collection-tasks
type: call
call: "salesforce-api.create-tasks"
with:
subject: "Collections follow-up: {{business_unit}} >{{aging_days}} days"
accounts: "{{get-aging-report.overdue_accounts}}"
- name: notify-finance
type: call
call: "msteams.send-channel-message"
with:
channel_id: "finance-collections"
text: "AR Aging Report ({{business_unit}}, >{{aging_days}} days): {{get-aging-report.overdue_count}} accounts, ${{get-aging-report.total_outstanding}} outstanding."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://ge-oracle.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: receivables
path: "/receivables/aging"
inputParameters:
- name: aging_days
in: query
- name: business_unit
in: query
operations:
- name: get-ar-aging
method: GET
- type: http
namespace: salesforce-api
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-tasks
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-finance/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves the outstanding accounts payable balance for a supplier from Oracle E-Business Suite.
naftiko: "0.5"
info:
label: "Oracle EBS Supplier Balance Lookup"
description: "Retrieves the outstanding accounts payable balance for a supplier from Oracle E-Business Suite."
tags:
- finance
- accounts-payable
- oracle
capability:
exposes:
- type: mcp
namespace: supplier-balance
port: 8080
tools:
- name: get-balance
description: "Given a supplier ID, return the outstanding balance and last payment date. Use when AP analysts need to verify supplier payment status."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The Oracle EBS supplier ID."
call: "oracle-ebs.get-supplier-balance"
with:
supplier_id: "{{supplier_id}}"
outputParameters:
- name: outstanding_balance
type: number
mapping: "$.balance.amount"
- name: currency
type: string
mapping: "$.balance.currency"
- name: last_payment_date
type: string
mapping: "$.balance.last_payment"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://ge-oracle.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: suppliers
path: "/suppliers/{{supplier_id}}/balance"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier-balance
method: GET
Orchestrates the monthly period close by running Oracle EBS reconciliation reports, validating totals against SAP, and creating a sign-off task in ServiceNow.
naftiko: "0.5"
info:
label: "Oracle Period Close Reconciliation Workflow"
description: "Orchestrates the monthly period close by running Oracle EBS reconciliation reports, validating totals against SAP, and creating a sign-off task in ServiceNow."
tags:
- finance
- accounting
- oracle
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: period-close
port: 8080
tools:
- name: run-period-close
description: "Given a fiscal period, execute the reconciliation workflow and prepare sign-off documentation. Use when finance runs the monthly close cycle."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "The fiscal period (e.g., 2026-03)."
- name: ledger_id
in: body
type: string
description: "The Oracle general ledger ID."
steps:
- name: get-oracle-totals
type: call
call: "oracle-ebs.get-period-totals"
with:
period: "{{fiscal_period}}"
ledger_id: "{{ledger_id}}"
- name: get-sap-totals
type: call
call: "sap-fi.get-period-totals"
with:
period: "{{fiscal_period}}"
- name: create-signoff
type: call
call: "servicenow.create-task"
with:
category: "finance_close"
short_description: "Period close {{fiscal_period}}: Oracle total ${{get-oracle-totals.balance}}, SAP total ${{get-sap-totals.balance}}"
assignment_group: "Finance_Controllers"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://ge-oracle.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: ledger
path: "/ledgers/{{ledger_id}}/periods/{{period}}/totals"
inputParameters:
- name: period
in: path
- name: ledger_id
in: path
operations:
- name: get-period-totals
method: GET
- type: http
namespace: sap-fi
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: period-totals
path: "/generalLedger/periods/{{period}}/totals"
inputParameters:
- name: period
in: path
operations:
- name: get-period-totals
method: GET
- type: http
namespace: servicenow
baseUri: "https://ge.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
Retrieves the current on-call engineer for a specified PagerDuty escalation policy.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current on-call engineer for a specified PagerDuty escalation policy."
tags:
- incident-management
- on-call
- pagerduty
capability:
exposes:
- type: mcp
namespace: oncall-lookup
port: 8080
tools:
- name: get-oncall
description: "Given an escalation policy ID, return the currently on-call engineer name and contact. Use when incident coordinators need to reach the responsible engineer."
inputParameters:
- name: policy_id
in: body
type: string
description: "The PagerDuty escalation policy ID."
call: "pagerduty-api.get-oncall"
with:
policy_id: "{{policy_id}}"
outputParameters:
- name: engineer_name
type: string
mapping: "$.oncalls[0].user.name"
- name: email
type: string
mapping: "$.oncalls[0].user.email"
consumes:
- type: http
namespace: pagerduty-api
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
inputParameters:
- name: policy_id
in: query
operations:
- name: get-oncall
method: GET
Retrieves the latest GE Aviation fleet analytics dashboard refresh status from Power BI including engine utilization and maintenance forecast data.
naftiko: "0.5"
info:
label: "Power BI Aviation Fleet Dashboard"
description: "Retrieves the latest GE Aviation fleet analytics dashboard refresh status from Power BI including engine utilization and maintenance forecast data."
tags:
- analytics
- aviation
- power-bi
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-aviation-dashboard
description: "Given a Power BI dataset ID, retrieve the last refresh status for GE's aviation fleet dashboard."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID."
call: "powerbi.get-refresh"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
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?$top=1"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh
method: GET
Triggers an on-demand refresh of a GE Power BI dataset to ensure executive and operations dashboards reflect the latest data.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Trigger"
description: "Triggers an on-demand refresh of a GE Power BI dataset to ensure executive and operations dashboards reflect the latest data."
tags:
- data
- analytics
- power-bi
- reporting
capability:
exposes:
- type: mcp
namespace: bi-refresh
port: 8080
tools:
- name: trigger-dataset-refresh
description: "Given a Power BI workspace ID and dataset ID, trigger an on-demand dataset refresh. Use when GE operational or financial data must be updated outside the scheduled refresh window."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
outputParameters:
- name: request_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Triggers a Power BI dataset refresh and then posts a dashboard link to the GE executive leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Power BI Executive Dashboard Digest"
description: "Triggers a Power BI dataset refresh and then posts a dashboard link to the GE executive leadership Microsoft Teams channel."
tags:
- reporting
- power-bi
- microsoft-teams
- executive
capability:
exposes:
- type: mcp
namespace: exec-reporting
port: 8080
tools:
- name: publish-exec-dashboard
description: "Given Power BI workspace and dataset IDs, trigger a dataset refresh and post a direct dashboard link to the executive Teams channel. Use before weekly leadership briefings or board reporting cycles."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID to refresh."
- name: dashboard_url
in: body
type: string
description: "The Power BI dashboard URL to share with leadership."
steps:
- name: refresh-dataset
type: call
call: "powerbi-exec.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: post-dashboard-link
type: call
call: "msteams-exec.send-message"
with:
channel_id: "$secrets.teams_exec_channel_id"
text: "Executive dashboard refreshed and ready. View here: {{dashboard_url}} (Refresh ID: {{refresh-dataset.requestId}})"
consumes:
- type: http
namespace: powerbi-exec
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams-exec
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates a gas turbine efficiency report by pulling sensor data from Snowflake, refreshing the Power BI dataset, and distributing the report link to plant managers via Teams.
naftiko: "0.5"
info:
label: "Power BI Gas Turbine Efficiency Report"
description: "Generates a gas turbine efficiency report by pulling sensor data from Snowflake, refreshing the Power BI dataset, and distributing the report link to plant managers via Teams."
tags:
- energy
- analytics
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: turbine-efficiency
port: 8080
tools:
- name: generate-efficiency-report
description: "Given a turbine fleet ID and time window, compile efficiency metrics and distribute. Use when plant managers need weekly turbine efficiency summaries."
inputParameters:
- name: fleet_id
in: body
type: string
description: "The turbine fleet identifier."
- name: period
in: body
type: string
description: "The reporting period (e.g., last-7-days)."
steps:
- name: query-metrics
type: call
call: "snowflake-api.query-fleet-efficiency"
with:
fleet_id: "{{fleet_id}}"
period: "{{period}}"
- name: refresh-report
type: call
call: "powerbi-api.refresh-dataset"
with:
dataset_id: "turbine-efficiency-{{fleet_id}}"
- name: distribute-report
type: call
call: "msteams.send-channel-message"
with:
channel_id: "plant-managers"
text: "Turbine Efficiency Report for fleet {{fleet_id}} ({{period}}): Avg efficiency {{query-metrics.avg_efficiency}}%, heat rate {{query-metrics.avg_heat_rate}} BTU/kWh. Dashboard updated."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-fleet-efficiency
method: POST
- type: http
namespace: powerbi-api
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-energy/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Generates a daily operations report by pulling turbine performance from Snowflake, maintenance tickets from ServiceNow, and publishing the report to Power BI and Teams.
naftiko: "0.5"
info:
label: "Power Plant Daily Ops Report Generator"
description: "Generates a daily operations report by pulling turbine performance from Snowflake, maintenance tickets from ServiceNow, and publishing the report to Power BI and Teams."
tags:
- energy
- operations
- snowflake
- servicenow
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: daily-ops-report
port: 8080
tools:
- name: generate-daily-report
description: "Given a plant ID and report date, aggregate turbine metrics, maintenance status, and distribute the report. Use when plant operations managers need their daily summary."
inputParameters:
- name: plant_id
in: body
type: string
description: "The power plant identifier."
- name: report_date
in: body
type: string
description: "The report date in YYYY-MM-DD format."
steps:
- name: get-turbine-metrics
type: call
call: "snowflake-api.query-plant-metrics"
with:
plant_id: "{{plant_id}}"
date: "{{report_date}}"
- name: get-open-tickets
type: call
call: "servicenow.query-plant-tickets"
with:
plant_id: "{{plant_id}}"
state: "open"
- name: refresh-dashboard
type: call
call: "powerbi-api.refresh-dataset"
with:
dataset_id: "plant-ops-{{plant_id}}"
- name: send-summary
type: call
call: "msteams.send-channel-message"
with:
channel_id: "plant-ops-{{plant_id}}"
text: "Daily Ops Report for {{plant_id}} on {{report_date}}: Avg efficiency {{get-turbine-metrics.avg_efficiency}}%. Open tickets: {{get-open-tickets.count}}. Dashboard refreshed."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-plant-metrics
method: POST
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: plant_id
in: query
- name: state
in: query
operations:
- name: query-plant-tickets
method: GET
- type: http
namespace: powerbi-api
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-energy/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Orchestrates a quarterly compliance audit by pulling access reviews from Azure AD, license data from Microsoft 365, and generating an audit report in ServiceNow.
naftiko: "0.5"
info:
label: "Quarterly Compliance Audit Orchestrator"
description: "Orchestrates a quarterly compliance audit by pulling access reviews from Azure AD, license data from Microsoft 365, and generating an audit report in ServiceNow."
tags:
- compliance
- audit
- azure-ad
- microsoft-365
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance-audit
port: 8080
tools:
- name: run-quarterly-audit
description: "Given a quarter identifier, execute access reviews, license audits, and generate the compliance report. Use when compliance officers need to run scheduled quarterly audits."
inputParameters:
- name: quarter
in: body
type: string
description: "The quarter identifier (e.g., 2026-Q1)."
- name: department
in: body
type: string
description: "The department to audit."
steps:
- name: pull-access-reviews
type: call
call: "azure-ad.list-access-reviews"
with:
department: "{{department}}"
- name: pull-license-data
type: call
call: "m365-api.get-license-usage"
with:
department: "{{department}}"
- name: create-audit-report
type: call
call: "servicenow.create-audit-record"
with:
quarter: "{{quarter}}"
department: "{{department}}"
access_review_count: "{{pull-access-reviews.review_count}}"
license_utilization: "{{pull-license-data.utilization_pct}}"
consumes:
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: access-reviews
path: "/identityGovernance/accessReviews/definitions"
inputParameters:
- name: department
in: query
operations:
- name: list-access-reviews
method: GET
- type: http
namespace: m365-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: licenses
path: "/reports/getOffice365ActiveUserDetail"
inputParameters:
- name: department
in: query
operations:
- name: get-license-usage
method: GET
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: audit-records
path: "/table/u_compliance_audit"
operations:
- name: create-audit-record
method: POST
Enriches a Salesforce account record with updated company data by patching key fields and logging the update activity.
naftiko: "0.5"
info:
label: "Salesforce Account Enrichment"
description: "Enriches a Salesforce account record with updated company data by patching key fields and logging the update activity."
tags:
- crm
- sales
- salesforce
capability:
exposes:
- type: mcp
namespace: crm-enrichment
port: 8080
tools:
- name: enrich-account
description: "Given a Salesforce account ID and updated company attributes, patch the account record with new data. Use when sales operations updates account profiles from external data sources."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID (18-character SFDC ID)."
- name: industry
in: body
type: string
description: "Updated industry classification."
- name: annual_revenue
in: body
type: number
description: "Updated annual revenue estimate in USD."
- name: employee_count
in: body
type: integer
description: "Updated employee count for the account."
call: "salesforce-enrich.update-account"
with:
account_id: "{{account_id}}"
industry: "{{industry}}"
annual_revenue: "{{annual_revenue}}"
employee_count: "{{employee_count}}"
outputParameters:
- name: updated_id
type: string
mapping: "$.id"
- name: success
type: boolean
mapping: "$.success"
consumes:
- type: http
namespace: salesforce-enrich
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
Performs a health check on contracts nearing renewal by pulling usage metrics from Snowflake, customer satisfaction from Salesforce, and generating a renewal brief in Confluence.
naftiko: "0.5"
info:
label: "Salesforce Contract Renewal Health Check"
description: "Performs a health check on contracts nearing renewal by pulling usage metrics from Snowflake, customer satisfaction from Salesforce, and generating a renewal brief in Confluence."
tags:
- sales
- customer-success
- salesforce
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: renewal-health
port: 8080
tools:
- name: check-renewal-health
description: "Given a Salesforce account ID, compile renewal readiness metrics. Use when account managers prepare for upcoming contract renewals."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
steps:
- name: get-account
type: call
call: "salesforce-api.get-account"
with:
account_id: "{{account_id}}"
- name: get-usage
type: call
call: "snowflake-api.query-account-usage"
with:
account_id: "{{account_id}}"
- name: get-satisfaction
type: call
call: "salesforce-api.get-nps-score"
with:
account_id: "{{account_id}}"
- name: create-brief
type: call
call: "confluence-api.create-page"
with:
space: "SALES"
title: "Renewal Brief: {{get-account.name}}"
body: "Usage trend: {{get-usage.trend}}. NPS: {{get-satisfaction.nps}}. Contract value: ${{get-account.contract_value}}. Renewal date: {{get-account.renewal_date}}."
consumes:
- type: http
namespace: salesforce-api
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- name: get-nps-score
method: GET
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-account-usage
method: POST
- type: http
namespace: confluence-api
baseUri: "https://ge-engineering.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
Retrieves customer account details from GE's Salesforce including account tier, installed base, and primary contact.
naftiko: "0.5"
info:
label: "Salesforce Customer Account Lookup"
description: "Retrieves customer account details from GE's Salesforce including account tier, installed base, and primary contact."
tags:
- sales
- customer-management
- salesforce
capability:
exposes:
- type: mcp
namespace: sales
port: 8080
tools:
- name: get-customer-account
description: "Given a Salesforce account ID, retrieve account name, tier, installed base count, and primary contact."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce account ID."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: tier
type: string
mapping: "$.Account_Tier__c"
- name: installed_base
type: number
mapping: "$.Installed_Base_Count__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
When a Salesforce opportunity is marked Closed-Won, opens a ServiceNow customer onboarding ticket and sends a welcome email via Microsoft 365.
naftiko: "0.5"
info:
label: "Salesforce Customer Onboarding Trigger"
description: "When a Salesforce opportunity is marked Closed-Won, opens a ServiceNow customer onboarding ticket and sends a welcome email via Microsoft 365."
tags:
- crm
- sales
- salesforce
- servicenow
- customer-onboarding
capability:
exposes:
- type: mcp
namespace: customer-onboarding
port: 8080
tools:
- name: trigger-customer-onboarding
description: "Given a Salesforce opportunity ID, retrieve account details, open a ServiceNow customer onboarding ticket, and send a welcome message to the account owner via Microsoft Teams. Use when a new GE customer deal is closed and implementation must start."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID that was closed-won."
steps:
- name: get-opportunity
type: call
call: "salesforce-onboard.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: create-onboard-ticket
type: call
call: "servicenow-onboard.create-incident"
with:
category: "customer_onboarding"
short_description: "New customer onboarding: {{get-opportunity.account_name}}"
description: "Opportunity: {{opportunity_id}}\nValue: ${{get-opportunity.amount}}\nClose date: {{get-opportunity.close_date}}"
- name: notify-account-owner
type: call
call: "msteams-onboard.send-message"
with:
recipient_upn: "{{get-opportunity.owner_email}}"
text: "Opportunity {{opportunity_id}} ({{get-opportunity.account_name}}) is Closed-Won! Onboarding ticket: {{create-onboard-ticket.number}}. Implementation begins."
consumes:
- type: http
namespace: salesforce-onboard
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: servicenow-onboard
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams-onboard
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
Fetches all open Salesforce opportunities above a dollar threshold for a given sales region and posts a pipeline summary to the sales team Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Sync"
description: "Fetches all open Salesforce opportunities above a dollar threshold for a given sales region and posts a pipeline summary to the sales team Microsoft Teams channel."
tags:
- crm
- sales
- salesforce
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: crm-pipeline
port: 8080
tools:
- name: digest-opportunity-pipeline
description: "Given a sales region and minimum deal value, query Salesforce for open opportunities and post a pipeline summary to the sales Teams channel. Use for weekly pipeline reviews and executive sales briefings."
inputParameters:
- name: region
in: body
type: string
description: "The sales region to filter opportunities by (e.g., North America, EMEA)."
- name: min_amount
in: body
type: number
description: "Minimum opportunity amount in USD to include in the summary."
steps:
- name: get-opportunities
type: call
call: "salesforce.query-opportunities"
with:
region: "{{region}}"
min_amount: "{{min_amount}}"
- name: post-summary
type: call
call: "msteams-sales.send-message"
with:
channel_id: "$secrets.teams_sales_channel_id"
text: "Sales Pipeline ({{region}}, >${{min_amount}}): {{get-opportunities.total_count}} open opportunities totaling ${{get-opportunities.total_value}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query"
inputParameters:
- name: q
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams-sales
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Salesforce opportunity is marked as won, creates a sales order in SAP S/4HANA and syncs the customer record, then notifies the account team.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Won to SAP Order"
description: "When a Salesforce opportunity is marked as won, creates a sales order in SAP S/4HANA and syncs the customer record, then notifies the account team."
tags:
- sales
- erp
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: opp-to-order
port: 8080
tools:
- name: process-won-opportunity
description: "Given a Salesforce opportunity ID, create the corresponding SAP sales order and update the team. Use when sales closes a deal and order fulfillment must begin."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
steps:
- name: get-opportunity
type: call
call: "salesforce-api.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: create-sap-order
type: call
call: "sap-sd.create-sales-order"
with:
customer_number: "{{get-opportunity.account_sap_id}}"
material: "{{get-opportunity.product_code}}"
quantity: "{{get-opportunity.quantity}}"
amount: "{{get-opportunity.amount}}"
- name: notify-account-team
type: call
call: "msteams.send-channel-message"
with:
channel_id: "sales-wins"
text: "Opportunity {{get-opportunity.name}} closed won! SAP order {{create-sap-order.order_number}} created for ${{get-opportunity.amount}}."
consumes:
- type: http
namespace: salesforce-api
baseUri: "https://ge.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: sap-sd
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: sales-orders
path: "/salesOrders"
operations:
- name: create-sales-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-sales/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Automatically creates renewal opportunities in Salesforce for expiring service contracts by checking SAP contract dates, creating the opportunity, and alerting the account team.
naftiko: "0.5"
info:
label: "Salesforce Renewal Opportunity Creator"
description: "Automatically creates renewal opportunities in Salesforce for expiring service contracts by checking SAP contract dates, creating the opportunity, and alerting the account team."
tags:
- sales
- renewals
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: renewal-creator
port: 8080
tools:
- name: create-renewal-opportunity
description: "Given a contract ID nearing expiration, create the renewal opportunity and notify the account team. Use when contracts approach their renewal window."
inputParameters:
- name: contract_id
in: body
type: string
description: "The SAP service contract ID."
steps:
- name: get-contract
type: call
call: "sap-sd.get-service-contract"
with:
contract_id: "{{contract_id}}"
- name: create-opportunity
type: call
call: "salesforce-api.create-opportunity"
with:
account_id: "{{get-contract.account_sfdc_id}}"
name: "Renewal: {{get-contract.description}}"
amount: "{{get-contract.annual_value}}"
close_date: "{{get-contract.expiry_date}}"
stage: "Qualification"
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
channel_id: "sales-renewals"
text: "Renewal opportunity created: {{get-contract.description}} (${{get-contract.annual_value}}). Expires: {{get-contract.expiry_date}}. SFDC: {{create-opportunity.id}}."
consumes:
- type: http
namespace: sap-sd
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: contracts
path: "/serviceContracts/{{contract_id}}"
inputParameters:
- name: contract_id
in: path
operations:
- name: get-service-contract
method: GET
- type: http
namespace: salesforce-api
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-sales/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a Salesforce service case requires field service, creates a SAP field service order, assigns a technician from Workday, and sends dispatch details via Teams.
naftiko: "0.5"
info:
label: "Salesforce Service Case to SAP Field Dispatch"
description: "When a Salesforce service case requires field service, creates a SAP field service order, assigns a technician from Workday, and sends dispatch details via Teams."
tags:
- field-service
- customer-service
- salesforce
- sap
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: field-dispatch
port: 8080
tools:
- name: dispatch-field-service
description: "Given a Salesforce case ID requiring on-site support, create the field service work order and dispatch a technician. Use when remote troubleshooting fails and on-site visit is needed."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID."
steps:
- name: get-case
type: call
call: "salesforce-api.get-case"
with:
case_id: "{{case_id}}"
- name: create-work-order
type: call
call: "sap-pm.create-field-order"
with:
customer: "{{get-case.account_name}}"
location: "{{get-case.site_address}}"
description: "{{get-case.subject}}"
- name: find-technician
type: call
call: "workday-api.get-available-technician"
with:
region: "{{get-case.region}}"
skill: "{{get-case.product_family}}"
- name: send-dispatch
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{find-technician.email}}"
text: "Field dispatch: {{get-case.account_name}} at {{get-case.site_address}}. Issue: {{get-case.subject}}. SAP order: {{create-work-order.order_number}}."
consumes:
- type: http
namespace: salesforce-api
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: sap-pm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: field-orders
path: "/fieldServiceOrders"
operations:
- name: create-field-order
method: POST
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: technicians
path: "/ge/technicians"
inputParameters:
- name: region
in: query
- name: skill
in: query
operations:
- name: get-available-technician
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
When an expense report is approved in SAP Concur, extracts line items, creates a journal entry in Oracle EBS, and sends a confirmation to the submitter via Outlook.
naftiko: "0.5"
info:
label: "SAP Concur Expense to Oracle Journal Entry"
description: "When an expense report is approved in SAP Concur, extracts line items, creates a journal entry in Oracle EBS, and sends a confirmation to the submitter via Outlook."
tags:
- finance
- expense-management
- sap-concur
- oracle
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: expense-journal
port: 8080
tools:
- name: process-approved-expense
description: "Given a Concur expense report ID, create the corresponding Oracle journal entry and confirm. Use when approved expenses need to be posted to the general ledger."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
steps:
- name: get-report
type: call
call: "concur-api.get-expense-report"
with:
report_id: "{{report_id}}"
- name: create-journal
type: call
call: "oracle-ebs.create-journal-entry"
with:
amount: "{{get-report.total_amount}}"
cost_center: "{{get-report.cost_center}}"
description: "Expense report {{report_id}} — {{get-report.employee_name}}"
- name: send-confirmation
type: call
call: "outlook-api.send-email"
with:
to: "{{get-report.employee_email}}"
subject: "Expense Report {{report_id}} Posted"
body: "Your expense report for ${{get-report.total_amount}} has been posted. Journal entry: {{create-journal.entry_id}}."
consumes:
- type: http
namespace: concur-api
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://ge-oracle.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: journals
path: "/journalEntries"
operations:
- name: create-journal-entry
method: POST
- type: http
namespace: outlook-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Converts demand forecasts from Snowflake into SAP planned orders, checks material availability, and creates production schedules, then notifies plant managers.
naftiko: "0.5"
info:
label: "SAP Demand Planning to Production Scheduling"
description: "Converts demand forecasts from Snowflake into SAP planned orders, checks material availability, and creates production schedules, then notifies plant managers."
tags:
- supply-chain
- production-planning
- snowflake
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: demand-to-production
port: 8080
tools:
- name: convert-demand-to-schedule
description: "Given a planning period and product group, translate demand into production schedules. Use when supply chain planning converts weekly demand forecasts into production runs."
inputParameters:
- name: planning_period
in: body
type: string
description: "The planning period (e.g., 2026-W14)."
- name: product_group
in: body
type: string
description: "The SAP product group."
steps:
- name: get-forecast
type: call
call: "snowflake-api.query-demand-forecast"
with:
period: "{{planning_period}}"
product_group: "{{product_group}}"
- name: check-material
type: call
call: "sap-mm.check-availability"
with:
materials: "{{get-forecast.material_list}}"
plant: "{{get-forecast.primary_plant}}"
- name: create-planned-orders
type: call
call: "sap-pp.create-planned-orders"
with:
product_group: "{{product_group}}"
quantities: "{{get-forecast.quantities}}"
plant: "{{get-forecast.primary_plant}}"
- name: notify-plant
type: call
call: "msteams.send-channel-message"
with:
channel_id: "production-planning"
text: "Production schedule for {{product_group}} ({{planning_period}}): {{create-planned-orders.order_count}} planned orders. Material availability: {{check-material.available_pct}}%."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-demand-forecast
method: POST
- type: http
namespace: sap-mm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: availability
path: "/materialAvailability/check"
operations:
- name: check-availability
method: POST
- type: http
namespace: sap-pp
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: planned-orders
path: "/plannedOrders"
operations:
- name: create-planned-orders
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-supply-chain/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Generates an environmental compliance report by pulling emissions data from Snowflake, cross-referencing SAP plant operations, and publishing to Confluence for regulatory submission.
naftiko: "0.5"
info:
label: "SAP Environmental Compliance Report"
description: "Generates an environmental compliance report by pulling emissions data from Snowflake, cross-referencing SAP plant operations, and publishing to Confluence for regulatory submission."
tags:
- sustainability
- compliance
- snowflake
- sap
- confluence
capability:
exposes:
- type: mcp
namespace: env-compliance
port: 8080
tools:
- name: generate-compliance-report
description: "Given a reporting period and plant ID, compile emissions data and generate the compliance report. Use when environmental engineers prepare regulatory submissions."
inputParameters:
- name: period
in: body
type: string
description: "The reporting period (e.g., 2026-Q1)."
- name: plant_id
in: body
type: string
description: "The SAP plant code."
steps:
- name: get-emissions
type: call
call: "snowflake-api.query-emissions-data"
with:
period: "{{period}}"
plant_id: "{{plant_id}}"
- name: get-plant-ops
type: call
call: "sap-api.get-plant-operations"
with:
plant_id: "{{plant_id}}"
period: "{{period}}"
- name: publish-report
type: call
call: "confluence-api.create-page"
with:
space: "ENV-COMPLIANCE"
title: "Environmental Report — {{plant_id}} — {{period}}"
body: "CO2 emissions: {{get-emissions.co2_tons}} tons. NOx: {{get-emissions.nox_tons}} tons. Production hours: {{get-plant-ops.operating_hours}}."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-emissions-data
method: POST
- type: http
namespace: sap-api
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: plants
path: "/plants/{{plant_id}}/operations"
inputParameters:
- name: plant_id
in: path
- name: period
in: query
operations:
- name: get-plant-operations
method: GET
- type: http
namespace: confluence-api
baseUri: "https://ge-engineering.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
When goods are received in SAP, triggers a quality inspection lot, assigns the inspector from Workday, and creates a Jira task for tracking.
naftiko: "0.5"
info:
label: "SAP Goods Receipt to Quality Inspection Trigger"
description: "When goods are received in SAP, triggers a quality inspection lot, assigns the inspector from Workday, and creates a Jira task for tracking."
tags:
- supply-chain
- quality-management
- sap
- workday
- jira
capability:
exposes:
- type: mcp
namespace: gr-inspection
port: 8080
tools:
- name: trigger-gr-inspection
description: "Given a goods receipt document number, create the inspection lot and assign inspectors. Use when inbound materials require mandatory quality checks."
inputParameters:
- name: gr_document
in: body
type: string
description: "The SAP goods receipt document number."
steps:
- name: get-gr-details
type: call
call: "sap-api.get-goods-receipt"
with:
document_number: "{{gr_document}}"
- name: create-lot
type: call
call: "sap-qm.create-inspection-lot"
with:
material: "{{get-gr-details.material_number}}"
batch: "{{get-gr-details.batch}}"
plant: "{{get-gr-details.plant}}"
- name: get-inspector
type: call
call: "workday-api.get-quality-inspector"
with:
plant: "{{get-gr-details.plant}}"
- name: create-task
type: call
call: "jira-api.create-issue"
with:
project: "QA"
issue_type: "Task"
summary: "Inspect lot {{create-lot.lot_number}} for material {{get-gr-details.material_number}}"
assignee: "{{get-inspector.employee_id}}"
consumes:
- type: http
namespace: sap-api
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: goods-receipts
path: "/goodsReceipts/{{document_number}}"
inputParameters:
- name: document_number
in: path
operations:
- name: get-goods-receipt
method: GET
- type: http
namespace: sap-qm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: inspection-lots
path: "/inspectionLots"
operations:
- name: create-inspection-lot
method: POST
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: inspectors
path: "/ge/qualityInspectors"
inputParameters:
- name: plant
in: query
operations:
- name: get-quality-inspector
method: GET
- type: http
namespace: jira-api
baseUri: "https://ge-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Reconciles intercompany billing by comparing SAP company code entries, flagging discrepancies, and creating resolution tasks in ServiceNow for the accounting team.
naftiko: "0.5"
info:
label: "SAP Intercompany Billing Reconciliation"
description: "Reconciles intercompany billing by comparing SAP company code entries, flagging discrepancies, and creating resolution tasks in ServiceNow for the accounting team."
tags:
- finance
- intercompany
- sap
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ic-reconciliation
port: 8080
tools:
- name: reconcile-intercompany
description: "Given two SAP company codes and a fiscal period, compare intercompany transactions and flag mismatches. Use when finance performs monthly intercompany reconciliation."
inputParameters:
- name: company_code_1
in: body
type: string
description: "The first SAP company code."
- name: company_code_2
in: body
type: string
description: "The second SAP company code."
- name: fiscal_period
in: body
type: string
description: "The fiscal period (e.g., 2026-03)."
steps:
- name: get-cc1-entries
type: call
call: "sap-fi.get-ic-entries"
with:
company_code: "{{company_code_1}}"
partner_code: "{{company_code_2}}"
period: "{{fiscal_period}}"
- name: get-cc2-entries
type: call
call: "sap-fi.get-ic-entries"
with:
company_code: "{{company_code_2}}"
partner_code: "{{company_code_1}}"
period: "{{fiscal_period}}"
- name: create-resolution-task
type: call
call: "servicenow.create-task"
with:
category: "ic_reconciliation"
short_description: "IC recon {{company_code_1}}<>{{company_code_2}} for {{fiscal_period}}: CC1=${{get-cc1-entries.total}}, CC2=${{get-cc2-entries.total}}"
assignment_group: "IC_Accounting"
- name: notify-finance
type: call
call: "msteams.send-channel-message"
with:
channel_id: "finance-ic"
text: "IC Recon {{company_code_1}}<>{{company_code_2}} ({{fiscal_period}}): CC1 total ${{get-cc1-entries.total}}, CC2 total ${{get-cc2-entries.total}}. Difference: ${{get-cc1-entries.difference}}."
consumes:
- type: http
namespace: sap-fi
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: ic-entries
path: "/generalLedger/intercompany"
inputParameters:
- name: company_code
in: query
- name: partner_code
in: query
- name: period
in: query
operations:
- name: get-ic-entries
method: GET
- type: http
namespace: servicenow
baseUri: "https://ge.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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-finance/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves current inventory levels for a specified material number from SAP warehouse management.
naftiko: "0.5"
info:
label: "SAP Inventory Level Lookup"
description: "Retrieves current inventory levels for a specified material number from SAP warehouse management."
tags:
- erp
- supply-chain
- sap
capability:
exposes:
- type: mcp
namespace: inventory-lookup
port: 8080
tools:
- name: lookup-inventory
description: "Given a SAP material number and plant code, return the current stock quantity and storage location. Use when supply chain planners need real-time inventory visibility."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number."
- name: plant_code
in: body
type: string
description: "The SAP plant code."
call: "sap-inventory.get-stock"
with:
material_number: "{{material_number}}"
plant_code: "{{plant_code}}"
outputParameters:
- name: quantity
type: number
mapping: "$.available_stock"
- name: storage_location
type: string
mapping: "$.storage_loc"
consumes:
- type: http
namespace: sap-inventory
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: stock
path: "/material/{{material_number}}/plant/{{plant_code}}/stock"
inputParameters:
- name: material_number
in: path
- name: plant_code
in: path
operations:
- name: get-stock
method: GET
Submits a supplier invoice to SAP S/4HANA accounts payable, links it to the corresponding PO, and notifies the approving manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Invoice Submission and Approval Routing"
description: "Submits a supplier invoice to SAP S/4HANA accounts payable, links it to the corresponding PO, and notifies the approving manager via Microsoft Teams."
tags:
- finance
- accounts-payable
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ap-processing
port: 8080
tools:
- name: submit-invoice
description: "Given invoice details and a linked SAP PO number, create the invoice in SAP S/4HANA and send an approval request to the finance manager via Microsoft Teams. Use during accounts-payable processing."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP PO number the invoice is billed against."
- name: invoice_number
in: body
type: string
description: "The supplier invoice number."
- name: amount
in: body
type: number
description: "Invoice total in the PO currency."
- name: approver_upn
in: body
type: string
description: "Microsoft Teams UPN of the finance approver."
steps:
- name: create-invoice
type: call
call: "sap-ap.create-supplier-invoice"
with:
po_number: "{{po_number}}"
invoice_number: "{{invoice_number}}"
amount: "{{amount}}"
- name: notify-approver
type: call
call: "msteams-ap.send-message"
with:
recipient_upn: "{{approver_upn}}"
text: "Invoice {{invoice_number}} for SAP PO {{po_number}} (${{amount}}) submitted. Invoice ID: {{create-invoice.invoice_id}}. Please review and approve in SAP."
consumes:
- type: http
namespace: sap-ap
baseUri: "https://ge-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: supplier-invoices
path: "/A_SupplierInvoice"
operations:
- name: create-supplier-invoice
method: POST
- type: http
namespace: msteams-ap
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
Validates an incoming supplier invoice by performing a three-way match against the SAP purchase order, goods receipt, and invoice amount, then routes discrepancies to AP for review.
naftiko: "0.5"
info:
label: "SAP Invoice Three-Way Match Validator"
description: "Validates an incoming supplier invoice by performing a three-way match against the SAP purchase order, goods receipt, and invoice amount, then routes discrepancies to AP for review."
tags:
- finance
- accounts-payable
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: invoice-match
port: 8080
tools:
- name: validate-invoice-match
description: "Given an invoice document number, perform three-way matching and flag discrepancies. Use when AP automation needs to validate supplier invoices before payment."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP invoice document number."
steps:
- name: get-invoice
type: call
call: "sap-fi.get-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: get-po
type: call
call: "sap-mm.get-purchase-order"
with:
po_number: "{{get-invoice.po_reference}}"
- name: get-gr
type: call
call: "sap-mm.get-goods-receipt-by-po"
with:
po_number: "{{get-invoice.po_reference}}"
- name: create-discrepancy-ticket
type: call
call: "servicenow.create-task"
with:
category: "ap_review"
short_description: "Invoice {{invoice_number}} three-way match: PO ${{get-po.amount}}, GR qty {{get-gr.received_qty}}, Invoice ${{get-invoice.amount}}"
assignment_group: "Accounts_Payable"
consumes:
- type: http
namespace: sap-fi
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: invoices
path: "/supplierInvoices/{{invoice_number}}"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap-mm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: purchase-orders
path: "/purchaseOrders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-purchase-order
method: GET
- name: goods-receipts
path: "/goodsReceipts"
inputParameters:
- name: po_number
in: query
operations:
- name: get-goods-receipt-by-po
method: GET
- type: http
namespace: servicenow
baseUri: "https://ge.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
Retrieves material master record details from GE's SAP S/4HANA system including description, unit of measure, and material group.
naftiko: "0.5"
info:
label: "SAP Material Master Data Lookup"
description: "Retrieves material master record details from GE's SAP S/4HANA system including description, unit of measure, and material group."
tags:
- erp
- procurement
- sap
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-material-master
description: "Given a SAP material number, retrieve the material description, base unit of measure, and material group from GE's SAP system."
inputParameters:
- name: material_number
in: body
type: string
description: "SAP material number."
call: "sap-s4.get-material"
with:
material_number: "{{material_number}}"
outputParameters:
- name: description
type: string
mapping: "$.d.MaterialDescription"
- name: base_uom
type: string
mapping: "$.d.BaseUnit"
- name: material_group
type: string
mapping: "$.d.MaterialGroup"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://ge-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: materials
path: "/A_Product('{{material_number}}')"
inputParameters:
- name: material_number
in: path
operations:
- name: get-material
method: GET
When SAP detects a material shortage, checks inventory levels, identifies affected production orders, and sends an alert to the supply chain Microsoft Teams channel.
naftiko: "0.5"
info:
label: "SAP Material Shortage Alert to Teams"
description: "When SAP detects a material shortage, checks inventory levels, identifies affected production orders, and sends an alert to the supply chain Microsoft Teams channel."
tags:
- supply-chain
- manufacturing
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shortage-alert
port: 8080
tools:
- name: trigger-shortage-alert
description: "Given a SAP material number with a shortage alert, look up inventory, find impacted production orders, and notify the supply chain team via Microsoft Teams. Use when MRP runs detect material shortfalls."
inputParameters:
- name: material_number
in: body
type: string
description: "The SAP material number with a detected shortage."
- name: plant_code
in: body
type: string
description: "The SAP plant code."
steps:
- name: check-inventory
type: call
call: "sap-inventory.get-stock"
with:
material_number: "{{material_number}}"
plant_code: "{{plant_code}}"
- name: get-affected-orders
type: call
call: "sap-pp.get-dependent-orders"
with:
material_number: "{{material_number}}"
plant_code: "{{plant_code}}"
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
channel_id: "supply-chain-alerts"
text: "Material shortage: {{material_number}} at plant {{plant_code}}. Current stock: {{check-inventory.available_stock}}. Affected orders: {{get-affected-orders.order_count}}."
consumes:
- type: http
namespace: sap-inventory
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: stock
path: "/material/{{material_number}}/plant/{{plant_code}}/stock"
inputParameters:
- name: material_number
in: path
- name: plant_code
in: path
operations:
- name: get-stock
method: GET
- type: http
namespace: sap-pp
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: dependent-orders
path: "/material/{{material_number}}/dependentOrders"
inputParameters:
- name: material_number
in: path
- name: plant_code
in: query
operations:
- name: get-dependent-orders
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-supply-chain/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Creates a SAP Plant Maintenance work order for equipment at a GE Vernova or GE Aerospace facility and notifies the maintenance technician via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Plant Maintenance Work Order Creator"
description: "Creates a SAP Plant Maintenance work order for equipment at a GE Vernova or GE Aerospace facility and notifies the maintenance technician via Microsoft Teams."
tags:
- manufacturing
- plant-maintenance
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: plant-maintenance
port: 8080
tools:
- name: create-work-order
description: "Given equipment ID, plant code, maintenance type, and description, create a SAP PM work order and notify the assigned technician in Microsoft Teams. Use when scheduling preventive or corrective maintenance tasks at GE facilities."
inputParameters:
- name: equipment_id
in: body
type: string
description: "The SAP equipment number requiring maintenance."
- name: plant_code
in: body
type: string
description: "The SAP plant code where the equipment is located."
- name: maintenance_type
in: body
type: string
description: "Type of maintenance: PM (preventive) or CM (corrective)."
- name: description
in: body
type: string
description: "Description of the maintenance task required."
- name: technician_upn
in: body
type: string
description: "Microsoft Teams UPN of the assigned maintenance technician."
steps:
- name: create-wo
type: call
call: "sap-pm.create-work-order"
with:
equipment_id: "{{equipment_id}}"
plant_code: "{{plant_code}}"
maintenance_type: "{{maintenance_type}}"
description: "{{description}}"
- name: notify-technician
type: call
call: "msteams-pm.send-message"
with:
recipient_upn: "{{technician_upn}}"
text: "New maintenance work order {{create-wo.work_order_number}} created for equipment {{equipment_id}} at plant {{plant_code}}. Type: {{maintenance_type}}. Description: {{description}}."
consumes:
- type: http
namespace: sap-pm
baseUri: "https://ge-s4.sap.com/sap/opu/odata/sap/API_MAINTENANCEORDER_0001"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: maintenance-orders
path: "/MaintenanceOrder"
operations:
- name: create-work-order
method: POST
- type: http
namespace: msteams-pm
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
Coordinates a planned plant shutdown by creating maintenance orders in SAP, notifying affected teams via Teams, and creating a tracking project in Jira.
naftiko: "0.5"
info:
label: "SAP Plant Shutdown Coordination"
description: "Coordinates a planned plant shutdown by creating maintenance orders in SAP, notifying affected teams via Teams, and creating a tracking project in Jira."
tags:
- maintenance
- operations
- sap
- microsoft-teams
- jira
capability:
exposes:
- type: mcp
namespace: shutdown-coord
port: 8080
tools:
- name: coordinate-plant-shutdown
description: "Given a plant ID and shutdown window, create all necessary maintenance orders and coordinate team notifications. Use when operations plans a scheduled plant outage."
inputParameters:
- name: plant_id
in: body
type: string
description: "The SAP plant code."
- name: start_date
in: body
type: string
description: "Shutdown start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Shutdown end date in YYYY-MM-DD format."
steps:
- name: get-equipment-list
type: call
call: "sap-pm.get-plant-equipment"
with:
plant_id: "{{plant_id}}"
- name: create-maintenance-orders
type: call
call: "sap-pm.batch-create-orders"
with:
plant_id: "{{plant_id}}"
order_type: "PM02"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: create-project
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
issue_type: "Epic"
summary: "Plant {{plant_id}} shutdown: {{start_date}} to {{end_date}}"
description: "Equipment count: {{get-equipment-list.count}}. Maintenance orders: {{create-maintenance-orders.order_count}}."
- name: notify-teams
type: call
call: "msteams.send-channel-message"
with:
channel_id: "plant-ops-{{plant_id}}"
text: "Planned shutdown for plant {{plant_id}}: {{start_date}} to {{end_date}}. {{create-maintenance-orders.order_count}} maintenance orders created. Jira epic: {{create-project.key}}."
consumes:
- type: http
namespace: sap-pm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: equipment
path: "/plants/{{plant_id}}/equipment"
inputParameters:
- name: plant_id
in: path
operations:
- name: get-plant-equipment
method: GET
- name: orders
path: "/maintenanceOrders/batch"
operations:
- name: batch-create-orders
method: POST
- type: http
namespace: jira-api
baseUri: "https://ge-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-energy/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Schedules preventive maintenance for industrial equipment by checking asset runtime from Snowflake, creating a SAP maintenance order, and assigning the technician from Workday.
naftiko: "0.5"
info:
label: "SAP Preventive Maintenance Scheduler"
description: "Schedules preventive maintenance for industrial equipment by checking asset runtime from Snowflake, creating a SAP maintenance order, and assigning the technician from Workday."
tags:
- maintenance
- industrial-iot
- snowflake
- sap
- workday
capability:
exposes:
- type: mcp
namespace: pm-scheduler
port: 8080
tools:
- name: schedule-preventive-maintenance
description: "Given an equipment ID, check runtime hours and schedule the next preventive maintenance window. Use when equipment approaches its PM interval threshold."
inputParameters:
- name: equipment_id
in: body
type: string
description: "The SAP equipment ID."
- name: pm_interval_hours
in: body
type: integer
description: "The preventive maintenance interval in operating hours."
steps:
- name: get-runtime
type: call
call: "snowflake-api.query-equipment-runtime"
with:
equipment_id: "{{equipment_id}}"
- name: create-pm-order
type: call
call: "sap-pm.create-maintenance-order"
with:
equipment_id: "{{equipment_id}}"
order_type: "PM01"
description: "Scheduled PM at {{get-runtime.total_hours}} hours"
- name: assign-technician
type: call
call: "workday-api.get-available-technician"
with:
plant: "{{get-runtime.plant_code}}"
skill: "{{get-runtime.equipment_type}}"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-equipment-runtime
method: POST
- type: http
namespace: sap-pm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: maintenance-orders
path: "/maintenanceOrders"
operations:
- name: create-maintenance-order
method: POST
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: technicians
path: "/ge/technicians"
inputParameters:
- name: plant
in: query
- name: skill
in: query
operations:
- name: get-available-technician
method: GET
Retrieves a supplier's delivery performance and quality metrics from SAP for use in vendor review meetings and procurement decision-making.
naftiko: "0.5"
info:
label: "SAP Procurement Supplier Performance Lookup"
description: "Retrieves a supplier's delivery performance and quality metrics from SAP for use in vendor review meetings and procurement decision-making."
tags:
- finance
- procurement
- sap
- supplier-management
capability:
exposes:
- type: mcp
namespace: supplier-mgmt
port: 8080
tools:
- name: get-supplier-performance
description: "Given a SAP supplier number, return on-time delivery rate, rejection rate, and total order count for the current fiscal year. Use in vendor review meetings and supplier qualification workflows."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP vendor/supplier number."
call: "sap-vendor.get-supplier-stats"
with:
supplier_id: "{{supplier_id}}"
outputParameters:
- name: on_time_delivery_rate
type: number
mapping: "$.d.OnTimeDeliveryPct"
- name: rejection_rate
type: number
mapping: "$.d.RejectionRatePct"
- name: total_orders
type: number
mapping: "$.d.TotalOrders"
consumes:
- type: http
namespace: sap-vendor
baseUri: "https://ge-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_0001"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: supplier-performance
path: "/A_Supplier('{{supplier_id}}')/to_SupplierCompany"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier-stats
method: GET
Retrieves the current status and completion percentage of a SAP production order.
naftiko: "0.5"
info:
label: "SAP Production Order Status Lookup"
description: "Retrieves the current status and completion percentage of a SAP production order."
tags:
- manufacturing
- production
- sap
capability:
exposes:
- type: mcp
namespace: production-order
port: 8080
tools:
- name: get-order-status
description: "Given a production order number, return the order status and quantities. Use when production planners need to track manufacturing progress."
inputParameters:
- name: order_number
in: body
type: string
description: "The SAP production order number."
call: "sap-pp.get-order"
with:
order_number: "{{order_number}}"
outputParameters:
- name: status
type: string
mapping: "$.order.system_status"
- name: planned_qty
type: number
mapping: "$.order.planned_quantity"
- name: confirmed_qty
type: number
mapping: "$.order.confirmed_quantity"
consumes:
- type: http
namespace: sap-pp
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: production-orders
path: "/productionOrders/{{order_number}}"
inputParameters:
- name: order_number
in: path
operations:
- name: get-order
method: GET
When a purchase requisition is created in SAP, validates the budget in Oracle, routes to the appropriate approver in Workday, and sends a notification via Teams.
naftiko: "0.5"
info:
label: "SAP Purchase Requisition to Approval Chain"
description: "When a purchase requisition is created in SAP, validates the budget in Oracle, routes to the appropriate approver in Workday, and sends a notification via Teams."
tags:
- procurement
- finance
- sap
- oracle
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pr-approval
port: 8080
tools:
- name: route-purchase-requisition
description: "Given a SAP purchase requisition number, validate budget availability, identify the approver, and notify them. Use when procurement creates high-value purchase requisitions."
inputParameters:
- name: pr_number
in: body
type: string
description: "The SAP purchase requisition number."
steps:
- name: get-pr-details
type: call
call: "sap-api.get-purchase-req"
with:
pr_number: "{{pr_number}}"
- name: check-budget
type: call
call: "oracle-ebs.check-budget"
with:
cost_center: "{{get-pr-details.cost_center}}"
amount: "{{get-pr-details.total_value}}"
- name: get-approver
type: call
call: "workday-api.get-cost-center-owner"
with:
cost_center: "{{get-pr-details.cost_center}}"
- name: notify-approver
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-approver.email}}"
text: "PR {{pr_number}} requires approval: {{get-pr-details.description}} for ${{get-pr-details.total_value}}. Budget status: {{check-budget.status}}."
consumes:
- type: http
namespace: sap-api
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: purchase-reqs
path: "/purchaseRequisitions/{{pr_number}}"
inputParameters:
- name: pr_number
in: path
operations:
- name: get-purchase-req
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://ge-oracle.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: budgets
path: "/budgets/check"
operations:
- name: check-budget
method: POST
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: org
path: "/ge/costCenters/{{cost_center}}/owner"
inputParameters:
- name: cost_center
in: path
operations:
- name: get-cost-center-owner
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
Retrieves the inspection lot status for a manufacturing batch from SAP QM.
naftiko: "0.5"
info:
label: "SAP Quality Inspection Lot Status"
description: "Retrieves the inspection lot status for a manufacturing batch from SAP QM."
tags:
- quality-management
- manufacturing
- sap
capability:
exposes:
- type: mcp
namespace: quality-inspection
port: 8080
tools:
- name: get-inspection-status
description: "Given an inspection lot number, return the inspection status and usage decision. Use when quality engineers need to verify batch disposition."
inputParameters:
- name: inspection_lot
in: body
type: string
description: "The SAP inspection lot number."
call: "sap-qm.get-lot-status"
with:
inspection_lot: "{{inspection_lot}}"
outputParameters:
- name: status
type: string
mapping: "$.lot.status"
- name: usage_decision
type: string
mapping: "$.lot.usage_decision"
- name: defect_count
type: integer
mapping: "$.lot.defect_count"
consumes:
- type: http
namespace: sap-qm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: inspection-lots
path: "/qualityInspectionLots/{{inspection_lot}}"
inputParameters:
- name: inspection_lot
in: path
operations:
- name: get-lot-status
method: GET
Looks up a GE SAP S/4HANA purchase order by number and returns header status, vendor name, total value, and currency.
naftiko: "0.5"
info:
label: "SAP S/4HANA Purchase Order Lookup"
description: "Looks up a GE SAP S/4HANA purchase order by number and returns header status, vendor name, total value, and currency."
tags:
- finance
- erp
- sap
- procurement
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP S/4HANA PO number, return the status, vendor name, total value, and currency. Use when auditing procurement spend or resolving supplier payment queries."
inputParameters:
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
call: "sap-s4.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_value
type: number
mapping: "$.d.TotalAmount"
- name: currency
type: string
mapping: "$.d.TransactionCurrency"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://ge-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Queries SAP S/4HANA for procurement and G&A spend by cost center for a given fiscal period, returning actuals for finance reporting.
naftiko: "0.5"
info:
label: "SAP Spend Analytics by Cost Center"
description: "Queries SAP S/4HANA for procurement and G&A spend by cost center for a given fiscal period, returning actuals for finance reporting."
tags:
- finance
- erp
- sap
- reporting
capability:
exposes:
- type: mcp
namespace: finance-analytics
port: 8080
tools:
- name: get-spend-by-cost-center
description: "Given a fiscal year, fiscal period, and optional cost center, return total spend actuals from SAP S/4HANA. Use for budget variance analysis, financial close, and executive finance reporting."
inputParameters:
- name: fiscal_year
in: body
type: string
description: "The SAP fiscal year (e.g., 2025)."
- name: period
in: body
type: string
description: "The fiscal period number (1-12)."
- name: cost_center
in: body
type: string
description: "Optional SAP cost center code to filter results."
call: "sap-cca.get-cost-center-actuals"
with:
fiscal_year: "{{fiscal_year}}"
period: "{{period}}"
cost_center: "{{cost_center}}"
outputParameters:
- name: total_actuals
type: number
mapping: "$.d.results[0].AmountInCoCodeCurrency"
- name: currency
type: string
mapping: "$.d.results[0].CompanyCodeCurrency"
consumes:
- type: http
namespace: sap-cca
baseUri: "https://ge-s4.sap.com/sap/opu/odata/sap/FAC_COSTCENTER_0001"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-center-actuals
path: "/CostCenterActuals"
inputParameters:
- name: fiscal_year
in: query
- name: period
in: query
- name: cost_center
in: query
operations:
- name: get-cost-center-actuals
method: GET
Tracks an outbound shipment by pulling shipping details from SAP TM, checking carrier status, and updating the Salesforce service case with delivery ETA.
naftiko: "0.5"
info:
label: "SAP Transportation Shipment Tracking"
description: "Tracks an outbound shipment by pulling shipping details from SAP TM, checking carrier status, and updating the Salesforce service case with delivery ETA."
tags:
- logistics
- supply-chain
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: shipment-tracking
port: 8080
tools:
- name: track-shipment
description: "Given a SAP shipment number, retrieve the latest status and update the customer case. Use when customers inquire about shipment delivery dates."
inputParameters:
- name: shipment_number
in: body
type: string
description: "The SAP transportation shipment number."
- name: case_id
in: body
type: string
description: "The Salesforce case ID to update."
steps:
- name: get-shipment
type: call
call: "sap-tm.get-shipment"
with:
shipment_number: "{{shipment_number}}"
- name: get-carrier-status
type: call
call: "sap-tm.get-carrier-tracking"
with:
tracking_id: "{{get-shipment.carrier_tracking_id}}"
- name: update-case
type: call
call: "salesforce-api.update-case"
with:
case_id: "{{case_id}}"
comment: "Shipment {{shipment_number}} status: {{get-carrier-status.status}}. ETA: {{get-carrier-status.eta}}."
consumes:
- type: http
namespace: sap-tm
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: shipments
path: "/transportationShipments/{{shipment_number}}"
inputParameters:
- name: shipment_number
in: path
operations:
- name: get-shipment
method: GET
- name: tracking
path: "/carrierTracking/{{tracking_id}}"
inputParameters:
- name: tracking_id
in: path
operations:
- name: get-carrier-tracking
method: GET
- type: http
namespace: salesforce-api
baseUri: "https://ge.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: update-case
method: PATCH
Retrieves vendor master record from GE's SAP system including vendor name, payment terms, and account group.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master record from GE's SAP system including vendor name, payment terms, and account group."
tags:
- procurement
- erp
- sap
capability:
exposes:
- type: mcp
namespace: erp
port: 8080
tools:
- name: get-vendor
description: "Given a SAP vendor number, retrieve vendor name, payment terms, and account group."
inputParameters:
- name: vendor_number
in: body
type: string
description: "SAP vendor number."
call: "sap-s4.get-vendor"
with:
vendor_number: "{{vendor_number}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.SupplierName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
consumes:
- type: http
namespace: sap-s4
baseUri: "https://ge-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: suppliers
path: "/A_Supplier('{{vendor_number}}')"
inputParameters:
- name: vendor_number
in: path
operations:
- name: get-vendor
method: GET
Processes a customer warranty claim by validating the product serial number in SAP, checking the warranty period, and creating a return authorization and ServiceNow case.
naftiko: "0.5"
info:
label: "SAP Warranty Claim Processing"
description: "Processes a customer warranty claim by validating the product serial number in SAP, checking the warranty period, and creating a return authorization and ServiceNow case."
tags:
- customer-service
- warranty
- sap
- servicenow
capability:
exposes:
- type: mcp
namespace: warranty-claim
port: 8080
tools:
- name: process-warranty-claim
description: "Given a product serial number and defect description, validate warranty coverage and initiate the return process. Use when customers submit warranty claims."
inputParameters:
- name: serial_number
in: body
type: string
description: "The product serial number."
- name: defect_description
in: body
type: string
description: "Description of the reported defect."
steps:
- name: validate-product
type: call
call: "sap-api.get-serial-number"
with:
serial_number: "{{serial_number}}"
- name: check-warranty
type: call
call: "sap-api.check-warranty-coverage"
with:
serial_number: "{{serial_number}}"
- name: create-return
type: call
call: "sap-sd.create-return-order"
with:
serial_number: "{{serial_number}}"
reason: "{{defect_description}}"
warranty_valid: "{{check-warranty.is_valid}}"
- name: create-case
type: call
call: "servicenow.create-case"
with:
category: "warranty"
short_description: "Warranty claim: {{serial_number}} — {{defect_description}}"
return_order: "{{create-return.order_number}}"
consumes:
- type: http
namespace: sap-api
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: serial-numbers
path: "/serialNumbers/{{serial_number}}"
inputParameters:
- name: serial_number
in: path
operations:
- name: get-serial-number
method: GET
- name: check-warranty-coverage
method: GET
- type: http
namespace: sap-sd
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: return-orders
path: "/returnOrders"
operations:
- name: create-return-order
method: POST
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cases
path: "/table/sn_customerservice_case"
operations:
- name: create-case
method: POST
Retrieves details of an IT asset from the ServiceNow CMDB by asset tag.
naftiko: "0.5"
info:
label: "ServiceNow Asset Lookup"
description: "Retrieves details of an IT asset from the ServiceNow CMDB by asset tag."
tags:
- it-operations
- cmdb
- servicenow
capability:
exposes:
- type: mcp
namespace: asset-lookup
port: 8080
tools:
- name: get-asset
description: "Given an asset tag, return the asset record including model, location, and assigned user from ServiceNow CMDB. Use when IT support needs to verify hardware details."
inputParameters:
- name: asset_tag
in: body
type: string
description: "The asset tag identifier."
call: "servicenow-cmdb.get-asset"
with:
asset_tag: "{{asset_tag}}"
outputParameters:
- name: asset_name
type: string
mapping: "$.result.name"
- name: model
type: string
mapping: "$.result.model_id.display_value"
- name: location
type: string
mapping: "$.result.location.display_value"
consumes:
- type: http
namespace: servicenow-cmdb
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/alm_hardware"
inputParameters:
- name: asset_tag
in: query
operations:
- name: get-asset
method: GET
Routes a ServiceNow change request through the approval chain by validating the change window, checking for conflicting changes, and notifying approvers via Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Approval Chain"
description: "Routes a ServiceNow change request through the approval chain by validating the change window, checking for conflicting changes, and notifying approvers via Teams."
tags:
- change-management
- it-operations
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: change-approval
port: 8080
tools:
- name: route-change-approval
description: "Given a ServiceNow change request number, validate and route for approval. Use when change management needs to process standard and normal change requests."
inputParameters:
- name: change_number
in: body
type: string
description: "The ServiceNow change request number."
steps:
- name: get-change
type: call
call: "servicenow.get-change-request"
with:
change_number: "{{change_number}}"
- name: check-conflicts
type: call
call: "servicenow.check-change-conflicts"
with:
start_time: "{{get-change.start_date}}"
end_time: "{{get-change.end_date}}"
ci: "{{get-change.cmdb_ci}}"
- name: notify-cab
type: call
call: "msteams.send-channel-message"
with:
channel_id: "change-advisory-board"
text: "Change {{change_number}}: {{get-change.short_description}}. Window: {{get-change.start_date}} to {{get-change.end_date}}. Conflicts: {{check-conflicts.conflict_count}}. Risk: {{get-change.risk_level}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request/{{change_number}}"
inputParameters:
- name: change_number
in: path
operations:
- name: get-change-request
method: GET
- name: conflicts
path: "/table/change_request"
inputParameters:
- name: start_time
in: query
- name: end_time
in: query
- name: ci
in: query
operations:
- name: check-change-conflicts
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-it/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Creates a ServiceNow change request for a planned GE infrastructure change with risk level routing to the appropriate approval group.
naftiko: "0.5"
info:
label: "ServiceNow Change Request for Infrastructure"
description: "Creates a ServiceNow change request for a planned GE infrastructure change with risk level routing to the appropriate approval group."
tags:
- itsm
- change-management
- servicenow
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: create-change-request
description: "Given change details, risk level, and implementation window, create a ServiceNow change request. Use when planning infrastructure, application, or configuration changes in the GE IT environment."
inputParameters:
- name: short_description
in: body
type: string
description: "Brief description of the change."
- name: risk
in: body
type: string
description: "Risk level: low, medium, or high."
- name: start_date
in: body
type: string
description: "Planned implementation start in ISO 8601 format."
- name: end_date
in: body
type: string
description: "Planned implementation end in ISO 8601 format."
call: "servicenow-chg.create-change"
with:
short_description: "{{short_description}}"
risk: "{{risk}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: change_number
type: string
mapping: "$.result.number"
- name: state
type: string
mapping: "$.result.state"
consumes:
- type: http
namespace: servicenow-chg
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change
method: POST
Retrieves incident status details from GE's ServiceNow instance including priority, assignment group, and resolution notes.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves incident status details from GE's ServiceNow instance including priority, assignment group, and resolution notes."
tags:
- it-operations
- incident-management
- servicenow
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-incident-status
description: "Given a ServiceNow incident number, retrieve the priority, status, assignment group, and resolution notes."
inputParameters:
- name: incident_number
in: body
type: string
description: "ServiceNow incident number."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: priority
type: string
mapping: "$.result.priority"
- name: state
type: string
mapping: "$.result.state"
- name: assignment_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{number}}"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
On a P1 incident in ServiceNow, escalates priority, assigns the on-call engineer group, and broadcasts an alert in the GE IT operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "ServiceNow P1 Incident Response Orchestrator"
description: "On a P1 incident in ServiceNow, escalates priority, assigns the on-call engineer group, and broadcasts an alert in the GE IT operations Microsoft Teams channel."
tags:
- itsm
- incident-response
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: it-incident-response
port: 8080
tools:
- name: handle-p1-incident
description: "Given a ServiceNow incident number and escalation context, update priority to P1, reassign to the critical on-call group, and broadcast an alert to the IT operations Teams channel. Use when an incident is confirmed as business-critical."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number to escalate (e.g., INC0001234)."
- name: escalation_reason
in: body
type: string
description: "Plain-text reason for the P1 escalation."
steps:
- name: escalate-incident
type: call
call: "servicenow-ir.patch-incident"
with:
number: "{{incident_number}}"
priority: "1"
assignment_group: "GE_IT_Critical_OnCall"
work_notes: "P1 escalation: {{escalation_reason}}"
- name: alert-teams
type: call
call: "msteams-ir.send-message"
with:
channel_id: "$secrets.teams_it_ops_channel_id"
text: "P1 INCIDENT ESCALATED: {{incident_number}} — {{escalation_reason}}. Assigned to GE IT Critical On-Call. All hands respond."
consumes:
- type: http
namespace: servicenow-ir
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident/{{number}}"
inputParameters:
- name: number
in: path
operations:
- name: patch-incident
method: PATCH
- type: http
namespace: msteams-ir
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a document from a specified SharePoint site library by file name.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Retrieves a document from a specified SharePoint site library by file name."
tags:
- document-management
- collaboration
- sharepoint
capability:
exposes:
- type: mcp
namespace: doc-retrieval
port: 8080
tools:
- name: get-document
description: "Given a SharePoint site ID and file name, return the document metadata and download URL. Use when engineers need to retrieve technical documents."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: file_name
in: body
type: string
description: "The document file name."
call: "sharepoint-api.get-file"
with:
site_id: "{{site_id}}"
file_name: "{{file_name}}"
outputParameters:
- name: file_id
type: string
mapping: "$.id"
- name: download_url
type: string
mapping: "$.@microsoft.graph.downloadUrl"
- name: modified_date
type: string
mapping: "$.lastModifiedDateTime"
consumes:
- type: http
namespace: sharepoint-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/sites/{{site_id}}/drive/root:/{{file_name}}"
inputParameters:
- name: site_id
in: path
- name: file_name
in: path
operations:
- name: get-file
method: GET
Runs automated data quality checks on Snowflake tables, logs failures to ServiceNow, and notifies the data engineering team via Teams.
naftiko: "0.5"
info:
label: "Snowflake Data Quality Check Pipeline"
description: "Runs automated data quality checks on Snowflake tables, logs failures to ServiceNow, and notifies the data engineering team via Teams."
tags:
- data-engineering
- data-quality
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: dq-pipeline
port: 8080
tools:
- name: run-data-quality-checks
description: "Given a Snowflake schema and table pattern, execute data quality validations and report failures. Use when data engineering runs daily data quality monitoring."
inputParameters:
- name: schema
in: body
type: string
description: "The Snowflake schema name."
- name: table_pattern
in: body
type: string
description: "The table name pattern to check."
steps:
- name: run-checks
type: call
call: "snowflake-api.execute-dq-suite"
with:
schema: "{{schema}}"
table_pattern: "{{table_pattern}}"
- name: log-failures
type: call
call: "servicenow.create-incident"
with:
category: "data_quality"
short_description: "DQ failures in {{schema}}: {{run-checks.failure_count}} checks failed"
assignment_group: "Data_Engineering"
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
channel_id: "data-quality"
text: "Data Quality Report for {{schema}}: {{run-checks.total_checks}} checks run, {{run-checks.pass_count}} passed, {{run-checks.failure_count}} failed."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-dq-suite
method: POST
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-data/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries Snowflake for energy consumption data across GE power plants for a specified date range.
naftiko: "0.5"
info:
label: "Snowflake Energy Consumption Query"
description: "Queries Snowflake for energy consumption data across GE power plants for a specified date range."
tags:
- analytics
- energy
- snowflake
capability:
exposes:
- type: mcp
namespace: energy-analytics
port: 8080
tools:
- name: query-consumption
description: "Given a start and end date, return aggregated energy consumption metrics from Snowflake. Use when energy analysts need consumption reports."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "snowflake-api.run-query"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: total_mwh
type: number
mapping: "$.data[0].total_mwh"
- name: plant_count
type: integer
mapping: "$.data[0].plant_count"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
inputParameters:
- name: start_date
in: body
- name: end_date
in: body
operations:
- name: run-query
method: POST
Queries GE's Snowflake data warehouse for gas turbine performance metrics including heat rate, availability, and output efficiency.
naftiko: "0.5"
info:
label: "Snowflake Turbine Performance Analytics"
description: "Queries GE's Snowflake data warehouse for gas turbine performance metrics including heat rate, availability, and output efficiency."
tags:
- power-generation
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: analytics
port: 8080
tools:
- name: get-turbine-analytics
description: "Given a turbine serial number and date range, retrieve performance metrics from GE's Snowflake analytics warehouse."
inputParameters:
- name: turbine_serial
in: body
type: string
description: "GE turbine serial number."
- name: period
in: body
type: string
description: "Reporting period."
call: "snowflake.query-turbine"
with:
serial: "{{turbine_serial}}"
period: "{{period}}"
outputParameters:
- name: heat_rate
type: number
mapping: "$.data[0].HEAT_RATE_BTU"
- name: availability_pct
type: number
mapping: "$.data[0].AVAILABILITY_PCT"
- name: output_mw
type: number
mapping: "$.data[0].OUTPUT_MW"
consumes:
- type: http
namespace: snowflake
baseUri: "https://ge.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-turbine
method: POST
When SolarWinds detects a network device alert, enriches the alert with device details, creates a ServiceNow incident, and notifies the network operations team via Teams.
naftiko: "0.5"
info:
label: "SolarWinds Network Alert to ServiceNow Ticket"
description: "When SolarWinds detects a network device alert, enriches the alert with device details, creates a ServiceNow incident, and notifies the network operations team via Teams."
tags:
- network-operations
- monitoring
- solarwinds
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: network-alert
port: 8080
tools:
- name: handle-network-alert
description: "Given a SolarWinds alert ID, process the network alert and create incident tickets. Use when network monitoring detects device failures or performance degradation."
inputParameters:
- name: alert_id
in: body
type: string
description: "The SolarWinds alert ID."
steps:
- name: get-alert
type: call
call: "solarwinds-api.get-alert"
with:
alert_id: "{{alert_id}}"
- name: get-device
type: call
call: "solarwinds-api.get-node"
with:
node_id: "{{get-alert.node_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
category: "network"
priority: "{{get-alert.severity}}"
short_description: "Network alert: {{get-device.caption}} — {{get-alert.message}}"
assignment_group: "Network_Operations"
- name: notify-noc
type: call
call: "msteams.send-channel-message"
with:
channel_id: "noc-alerts"
text: "Network Alert: {{get-device.caption}} ({{get-device.ip_address}}). Issue: {{get-alert.message}}. Ticket: {{create-incident.number}}."
consumes:
- type: http
namespace: solarwinds-api
baseUri: "https://ge-solarwinds.ge.com:17778/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_password"
resources:
- name: alerts
path: "/Query"
operations:
- name: get-alert
method: POST
- name: nodes
path: "/Query"
operations:
- name: get-node
method: POST
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-noc/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Triggers a data extract refresh for a specified Tableau workbook on Tableau Server.
naftiko: "0.5"
info:
label: "Tableau Dashboard Extract Refresh"
description: "Triggers a data extract refresh for a specified Tableau workbook on Tableau Server."
tags:
- analytics
- business-intelligence
- tableau
capability:
exposes:
- type: mcp
namespace: extract-refresh
port: 8080
tools:
- name: trigger-refresh
description: "Given a Tableau workbook ID, trigger an extract refresh and return the job status. Use when analysts need to ensure dashboards reflect the latest data."
inputParameters:
- name: workbook_id
in: body
type: string
description: "The Tableau workbook ID."
call: "tableau-api.refresh-extract"
with:
workbook_id: "{{workbook_id}}"
outputParameters:
- name: job_id
type: string
mapping: "$.job.id"
- name: status
type: string
mapping: "$.job.status"
consumes:
- type: http
namespace: tableau-api
baseUri: "https://ge-tableau.ge.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/default/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-extract
method: POST
Validates data migration from Teradata to Snowflake by comparing row counts and checksums, then logs results in ServiceNow and notifies the data team via Teams.
naftiko: "0.5"
info:
label: "Teradata Data Warehouse Migration Validator"
description: "Validates data migration from Teradata to Snowflake by comparing row counts and checksums, then logs results in ServiceNow and notifies the data team via Teams."
tags:
- data-engineering
- migration
- teradata
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: migration-validator
port: 8080
tools:
- name: validate-migration
description: "Given a table name, compare source Teradata and target Snowflake data for consistency. Use when data engineers need to verify migration completeness."
inputParameters:
- name: table_name
in: body
type: string
description: "The table name to validate."
- name: schema
in: body
type: string
description: "The schema name."
steps:
- name: get-teradata-stats
type: call
call: "teradata-api.get-table-stats"
with:
table_name: "{{table_name}}"
schema: "{{schema}}"
- name: get-snowflake-stats
type: call
call: "snowflake-api.get-table-stats"
with:
table_name: "{{table_name}}"
schema: "{{schema}}"
- name: log-result
type: call
call: "servicenow.create-task"
with:
category: "data_migration"
short_description: "Migration validation: {{schema}}.{{table_name}} — Teradata rows: {{get-teradata-stats.row_count}}, Snowflake rows: {{get-snowflake-stats.row_count}}"
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
channel_id: "data-migration"
text: "Migration check for {{schema}}.{{table_name}}: Teradata={{get-teradata-stats.row_count}} rows, Snowflake={{get-snowflake-stats.row_count}} rows."
consumes:
- type: http
namespace: teradata-api
baseUri: "https://ge-teradata.ge.com/api/v1"
authentication:
type: basic
username: "$secrets.teradata_user"
password: "$secrets.teradata_password"
resources:
- name: tables
path: "/databases/{{schema}}/tables/{{table_name}}/stats"
inputParameters:
- name: table_name
in: path
- name: schema
in: path
operations:
- name: get-table-stats
method: GET
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-table-stats
method: POST
- type: http
namespace: servicenow
baseUri: "https://ge.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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-data/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Triggers a Terraform Cloud plan-and-apply run for a GE infrastructure workspace after an approved change request.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Run"
description: "Triggers a Terraform Cloud plan-and-apply run for a GE infrastructure workspace after an approved change request."
tags:
- cloud
- infrastructure
- terraform
- devops
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: trigger-terraform-run
description: "Given a Terraform Cloud workspace ID and run message, trigger a new plan-and-apply run. Use when deploying approved GE infrastructure changes."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Terraform Cloud workspace ID (e.g., ws-xxxxxxxxxxxxxxxx)."
- name: message
in: body
type: string
description: "Human-readable message describing the reason for this run."
call: "terraform-cloud.create-run"
with:
workspace_id: "{{workspace_id}}"
message: "{{message}}"
outputParameters:
- name: run_id
type: string
mapping: "$.data.id"
- name: status
type: string
mapping: "$.data.attributes.status"
consumes:
- type: http
namespace: terraform-cloud
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
When Datadog detects a turbine sensor anomaly, queries Snowflake for historical patterns, creates a ServiceNow maintenance ticket, and notifies the field engineering team via Teams.
naftiko: "0.5"
info:
label: "Turbine Anomaly Detection and Maintenance Ticket"
description: "When Datadog detects a turbine sensor anomaly, queries Snowflake for historical patterns, creates a ServiceNow maintenance ticket, and notifies the field engineering team via Teams."
tags:
- industrial-iot
- maintenance
- datadog
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: turbine-anomaly
port: 8080
tools:
- name: handle-turbine-anomaly
description: "Given a turbine ID and anomaly type, correlate with historical data, open a maintenance work order, and alert field engineers. Use when IoT sensors detect out-of-range turbine readings."
inputParameters:
- name: turbine_id
in: body
type: string
description: "The turbine asset identifier."
- name: anomaly_type
in: body
type: string
description: "The type of anomaly detected (e.g., vibration, temperature)."
steps:
- name: get-history
type: call
call: "snowflake-api.query-turbine-history"
with:
turbine_id: "{{turbine_id}}"
anomaly_type: "{{anomaly_type}}"
- name: create-ticket
type: call
call: "servicenow.create-work-order"
with:
asset_id: "{{turbine_id}}"
short_description: "Turbine {{turbine_id}} — {{anomaly_type}} anomaly detected"
priority: "2"
assignment_group: "Field_Engineering"
- name: notify-engineers
type: call
call: "msteams.send-channel-message"
with:
channel_id: "field-engineering"
text: "Anomaly on turbine {{turbine_id}}: {{anomaly_type}}. Historical occurrences: {{get-history.occurrence_count}}. ServiceNow ticket: {{create-ticket.number}}."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://ge-energy.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query-turbine-history
method: POST
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: work-orders
path: "/table/wm_order"
operations:
- name: create-work-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-energy/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a new vendor is added to SAP, runs a risk assessment by enriching vendor data via ZoomInfo, creates a risk review in Jira, and stores the assessment in Confluence.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Workflow"
description: "When a new vendor is added to SAP, runs a risk assessment by enriching vendor data via ZoomInfo, creates a risk review in Jira, and stores the assessment in Confluence."
tags:
- procurement
- risk-management
- sap
- zoominfo
- jira
- confluence
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor-risk
description: "Given a SAP vendor ID, enrich the vendor profile, create a risk review task, and document findings. Use when procurement onboards a new supplier."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The SAP vendor master ID."
steps:
- name: get-vendor
type: call
call: "sap-api.get-vendor"
with:
vendor_id: "{{vendor_id}}"
- name: enrich-vendor
type: call
call: "zoominfo-api.enrich-company"
with:
company_name: "{{get-vendor.vendor_name}}"
country: "{{get-vendor.country}}"
- name: create-review
type: call
call: "jira-api.create-issue"
with:
project: "PROC"
issue_type: "Task"
summary: "Vendor risk review: {{get-vendor.vendor_name}}"
description: "Revenue: {{enrich-vendor.revenue}}. Employee count: {{enrich-vendor.employee_count}}."
- name: save-assessment
type: call
call: "confluence-api.create-page"
with:
space: "PROCUREMENT"
title: "Risk Assessment — {{get-vendor.vendor_name}}"
body: "Vendor: {{get-vendor.vendor_name}}. Risk score: {{enrich-vendor.risk_score}}. Jira: {{create-review.key}}."
consumes:
- type: http
namespace: sap-api
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: vendors
path: "/vendors/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: zoominfo-api
baseUri: "https://api.zoominfo.com/lookup/v1"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company/enrich"
operations:
- name: enrich-company
method: POST
- type: http
namespace: jira-api
baseUri: "https://ge-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: confluence-api
baseUri: "https://ge-engineering.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
Orchestrates the annual compensation review by pulling market data from Workday, comparing against budget from Oracle, generating recommendations, and distributing via Teams.
naftiko: "0.5"
info:
label: "Workday Annual Compensation Review Orchestrator"
description: "Orchestrates the annual compensation review by pulling market data from Workday, comparing against budget from Oracle, generating recommendations, and distributing via Teams."
tags:
- hr
- compensation
- workday
- oracle
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: comp-review
port: 8080
tools:
- name: run-compensation-review
description: "Given a department and review cycle, compile compensation analytics and distribute recommendations. Use when HR initiates the annual merit review process."
inputParameters:
- name: department
in: body
type: string
description: "The department to review."
- name: review_cycle
in: body
type: string
description: "The review cycle identifier (e.g., 2026-annual)."
steps:
- name: get-comp-data
type: call
call: "workday-api.get-department-comp"
with:
department: "{{department}}"
- name: get-budget
type: call
call: "oracle-ebs.get-merit-budget"
with:
department: "{{department}}"
cycle: "{{review_cycle}}"
- name: notify-managers
type: call
call: "msteams.send-channel-message"
with:
channel_id: "hr-comp-review"
text: "Compensation review data ready for {{department}}. Headcount: {{get-comp-data.headcount}}. Avg compa-ratio: {{get-comp-data.avg_compa_ratio}}. Merit budget: ${{get-budget.total_budget}}."
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/ge/departments/{{department}}/compensation"
inputParameters:
- name: department
in: path
operations:
- name: get-department-comp
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://ge-oracle.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: budgets
path: "/meritBudgets/{{department}}"
inputParameters:
- name: department
in: path
- name: cycle
in: query
operations:
- name: get-merit-budget
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/ge-hr/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves the compensation band details for a specified job profile in Workday.
naftiko: "0.5"
info:
label: "Workday Compensation Band Lookup"
description: "Retrieves the compensation band details for a specified job profile in Workday."
tags:
- hr
- compensation
- workday
capability:
exposes:
- type: mcp
namespace: comp-lookup
port: 8080
tools:
- name: get-comp-band
description: "Given a job profile ID, return the salary range minimum, midpoint, and maximum. Use when HR business partners need to validate compensation offers."
inputParameters:
- name: job_profile_id
in: body
type: string
description: "The Workday job profile ID."
call: "workday-comp.get-band"
with:
job_profile_id: "{{job_profile_id}}"
outputParameters:
- name: min_salary
type: number
mapping: "$.band.minimum"
- name: mid_salary
type: number
mapping: "$.band.midpoint"
- name: max_salary
type: number
mapping: "$.band.maximum"
consumes:
- type: http
namespace: workday-comp
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/ge/jobProfiles/{{job_profile_id}}/compensationBand"
inputParameters:
- name: job_profile_id
in: path
operations:
- name: get-band
method: GET
Retrieves employee benefits enrollment details from GE's Workday HCM including health plan, 401k contribution, and life insurance coverage.
naftiko: "0.5"
info:
label: "Workday Employee Benefits Lookup"
description: "Retrieves employee benefits enrollment details from GE's Workday HCM including health plan, 401k contribution, and life insurance coverage."
tags:
- hr
- benefits
- workday
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-benefits
description: "Given a Workday employee ID, retrieve current benefits enrollment details."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday worker ID."
call: "workday.get-benefits"
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: health_plan
type: string
mapping: "$.benefits.healthPlan.name"
- name: retirement_pct
type: number
mapping: "$.benefits.retirementContributionPct"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: benefits
path: "/ge/workers/{{worker_id}}/benefits"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-benefits
method: GET
Exports current GE headcount grouped by business unit and cost center from Workday for workforce planning and executive reporting.
naftiko: "0.5"
info:
label: "Workday Headcount and Org Structure Export"
description: "Exports current GE headcount grouped by business unit and cost center from Workday for workforce planning and executive reporting."
tags:
- hr
- reporting
- workday
- headcount
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-by-business-unit
description: "Returns a list of active GE employees grouped by business unit and cost center from Workday. Use for headcount planning, org design analysis, and HR executive dashboards."
call: "workday-hcm.headcount-export"
outputParameters:
- name: employees
type: array
mapping: "$.data"
- name: total_count
type: number
mapping: "$.total"
consumes:
- type: http
namespace: workday-hcm
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers-export
path: "/ge/workers"
inputParameters:
- name: format
in: query
value: "json"
operations:
- name: headcount-export
method: GET
When a job requisition is approved in Workday, formats the job description and posts it to LinkedIn Jobs, then updates the requisition with the posting URL.
naftiko: "0.5"
info:
label: "Workday Job Requisition to LinkedIn Posting"
description: "When a job requisition is approved in Workday, formats the job description and posts it to LinkedIn Jobs, then updates the requisition with the posting URL."
tags:
- hr
- recruiting
- workday
- linkedin
capability:
exposes:
- type: mcp
namespace: req-to-linkedin
port: 8080
tools:
- name: post-requisition-to-linkedin
description: "Given a Workday requisition ID, publish the job to LinkedIn and link the posting back. Use when approved requisitions need external job board visibility."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID."
steps:
- name: get-requisition
type: call
call: "workday-api.get-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: post-to-linkedin
type: call
call: "linkedin-api.create-job-posting"
with:
title: "{{get-requisition.job_title}}"
description: "{{get-requisition.description}}"
location: "{{get-requisition.location}}"
company_id: "ge-company"
- name: update-requisition
type: call
call: "workday-api.update-requisition"
with:
requisition_id: "{{requisition_id}}"
external_url: "{{post-to-linkedin.posting_url}}"
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/ge/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- name: update-requisition
method: PATCH
- type: http
namespace: linkedin-api
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/jobPostings"
operations:
- name: create-job-posting
method: POST
Fetches approved open job requisitions from Workday Recruiting and publishes them to the GE LinkedIn company page.
naftiko: "0.5"
info:
label: "Workday Open Requisition to LinkedIn Publisher"
description: "Fetches approved open job requisitions from Workday Recruiting and publishes them to the GE LinkedIn company page."
tags:
- hr
- recruiting
- workday
- linkedin
capability:
exposes:
- type: mcp
namespace: talent-publishing
port: 8080
tools:
- name: publish-requisition-to-linkedin
description: "Given a Workday requisition ID, retrieve the job details from Workday and publish the role to the GE LinkedIn company page. Use when a recruiter approves a role for external publication."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The Workday job requisition ID to publish."
steps:
- name: get-requisition
type: call
call: "workday-jobs.get-job-requisition"
with:
requisition_id: "{{requisition_id}}"
- name: post-to-linkedin
type: call
call: "linkedin-jobs.create-job-posting"
with:
title: "{{get-requisition.job_title}}"
description: "{{get-requisition.job_description}}"
location: "{{get-requisition.location}}"
company_id: "$secrets.linkedin_ge_company_id"
consumes:
- type: http
namespace: workday-jobs
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/ge/jobRequisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-job-requisition
method: GET
- type: http
namespace: linkedin-jobs
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/simpleJobPostings"
operations:
- name: create-job-posting
method: POST
When an organizational restructure is applied in Workday, updates cost center mappings in SAP, adjusts Azure AD group memberships, and creates a Jira change tracking epic.
naftiko: "0.5"
info:
label: "Workday Org Restructure Propagation"
description: "When an organizational restructure is applied in Workday, updates cost center mappings in SAP, adjusts Azure AD group memberships, and creates a Jira change tracking epic."
tags:
- hr
- operations
- workday
- sap
- azure-ad
- jira
capability:
exposes:
- type: mcp
namespace: org-restructure
port: 8080
tools:
- name: propagate-org-change
description: "Given a Workday supervisory org ID and effective date, propagate the restructure across downstream systems. Use when HR implements organizational changes."
inputParameters:
- name: org_id
in: body
type: string
description: "The Workday supervisory organization ID."
- name: effective_date
in: body
type: string
description: "The effective date in YYYY-MM-DD format."
steps:
- name: get-org-change
type: call
call: "workday-api.get-org-details"
with:
org_id: "{{org_id}}"
- name: update-sap-cc
type: call
call: "sap-api.update-cost-center"
with:
cost_center: "{{get-org-change.cost_center}}"
new_manager: "{{get-org-change.new_manager_id}}"
effective_date: "{{effective_date}}"
- name: update-ad-groups
type: call
call: "azure-ad.update-group-members"
with:
group_id: "{{get-org-change.ad_group_id}}"
members: "{{get-org-change.member_upns}}"
- name: create-tracking
type: call
call: "jira-api.create-issue"
with:
project: "HR-OPS"
issue_type: "Epic"
summary: "Org restructure: {{get-org-change.org_name}} effective {{effective_date}}"
description: "New manager: {{get-org-change.new_manager_name}}. Headcount: {{get-org-change.headcount}}."
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: orgs
path: "/ge/supervisoryOrganizations/{{org_id}}"
inputParameters:
- name: org_id
in: path
operations:
- name: get-org-details
method: GET
- type: http
namespace: sap-api
baseUri: "https://ge-sap.s4hana.ondemand.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: cost-centers
path: "/costCenters/{{cost_center}}"
inputParameters:
- name: cost_center
in: path
operations:
- name: update-cost-center
method: PATCH
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: groups
path: "/groups/{{group_id}}/members"
inputParameters:
- name: group_id
in: path
operations:
- name: update-group-members
method: PATCH
- type: http
namespace: jira-api
baseUri: "https://ge-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When a Workday job change is approved, updates Azure AD group memberships to reflect the new role and sends the employee a Teams confirmation.
naftiko: "0.5"
info:
label: "Workday Role Change Provisioner"
description: "When a Workday job change is approved, updates Azure AD group memberships to reflect the new role and sends the employee a Teams confirmation."
tags:
- hr
- identity
- workday
- azure-ad
- microsoft-teams
- role-change
capability:
exposes:
- type: mcp
namespace: hr-role-change
port: 8080
tools:
- name: sync-role-change
description: "Given a Workday employee ID, new role, and Azure AD group ID, update group membership and notify the employee via Teams. Use when an internal transfer, promotion, or role change is finalized in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the employee changing roles."
- name: new_role
in: body
type: string
description: "The new job title or role name."
- name: new_ad_group
in: body
type: string
description: "The Azure AD group ID for the new role's access permissions."
steps:
- name: get-worker
type: call
call: "workday-role.get-worker"
with:
worker_id: "{{employee_id}}"
- name: add-to-ad-group
type: call
call: "azure-ad-role.add-group-member"
with:
group_id: "{{new_ad_group}}"
user_id: "{{get-worker.azure_object_id}}"
- name: notify-employee
type: call
call: "msteams-role.send-message"
with:
recipient_upn: "{{get-worker.work_email}}"
text: "Your role has been updated to {{new_role}}. Your system access has been provisioned accordingly."
consumes:
- type: http
namespace: workday-role
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/ge/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: azure-ad-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: group-members
path: "/groups/{{group_id}}/members/$ref"
inputParameters:
- name: group_id
in: path
operations:
- name: add-group-member
method: POST
- type: http
namespace: msteams-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chats
path: "/chats"
operations:
- name: send-message
method: POST
When an employee termination is processed in Workday, disables their Azure AD account, closes their ServiceNow access, and logs the action to the compliance audit trail.
naftiko: "0.5"
info:
label: "Workday Termination to Access Revocation"
description: "When an employee termination is processed in Workday, disables their Azure AD account, closes their ServiceNow access, and logs the action to the compliance audit trail."
tags:
- hr
- security
- workday
- azure-ad
- servicenow
capability:
exposes:
- type: mcp
namespace: term-revocation
port: 8080
tools:
- name: process-termination
description: "Given a Workday worker ID and termination date, revoke all system access and create compliance records. Use when HR processes an employee separation."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: termination_date
in: body
type: string
description: "The termination effective date in YYYY-MM-DD format."
steps:
- name: get-worker
type: call
call: "workday-api.get-worker"
with:
worker_id: "{{worker_id}}"
- name: disable-ad-account
type: call
call: "azure-ad.disable-user"
with:
user_principal_name: "{{get-worker.work_email}}"
- name: close-access-requests
type: call
call: "servicenow.close-user-requests"
with:
user_email: "{{get-worker.work_email}}"
reason: "Employee termination effective {{termination_date}}"
- name: log-audit
type: call
call: "servicenow.create-audit-entry"
with:
action: "access_revocation"
employee: "{{get-worker.full_name}}"
date: "{{termination_date}}"
ad_disabled: "true"
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/ge/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: users
path: "/users/{{user_principal_name}}"
inputParameters:
- name: user_principal_name
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://ge.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
inputParameters:
- name: user_email
in: query
operations:
- name: close-user-requests
method: PATCH
- name: audit
path: "/table/u_audit_log"
operations:
- name: create-audit-entry
method: POST
Returns the approval status and date coverage for an employee time-off request from Workday.
naftiko: "0.5"
info:
label: "Workday Time-Off Request Status Lookup"
description: "Returns the approval status and date coverage for an employee time-off request from Workday."
tags:
- hr
- workday
- time-off
capability:
exposes:
- type: mcp
namespace: hr-time
port: 8080
tools:
- name: get-time-off-request
description: "Given a Workday worker ID and time-off request ID, return the current approval status and covered date range. Use when employees or managers need to check leave approval status."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the employee."
- name: request_id
in: body
type: string
description: "The Workday time-off request ID."
call: "workday-pto.get-time-off-request"
with:
worker_id: "{{worker_id}}"
request_id: "{{request_id}}"
outputParameters:
- name: status
type: string
mapping: "$.data.overallStatus"
- name: start_date
type: string
mapping: "$.data.startDate"
- name: end_date
type: string
mapping: "$.data.endDate"
consumes:
- type: http
namespace: workday-pto
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: time-off-requests
path: "/ge/workers/{{worker_id}}/timeOffRequests/{{request_id}}"
inputParameters:
- name: worker_id
in: path
- name: request_id
in: path
operations:
- name: get-time-off-request
method: GET