Honda Capabilities

Naftiko 0.5 capability definitions for Honda - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Uses the Anthropic API to summarize technical engineering documents (vehicle specifications, R&D reports, patent drafts) stored in SharePoint and posts the summary to the relevant engineering Teams channel.

naftiko: "0.5"
info:
  label: "AI Technical Document Summarization"
  description: "Uses the Anthropic API to summarize technical engineering documents (vehicle specifications, R&D reports, patent drafts) stored in SharePoint and posts the summary to the relevant engineering Teams channel."
  tags:
    - ai
    - automation
    - anthropic
    - sharepoint
    - microsoft-teams
    - engineering
capability:
  exposes:
    - type: mcp
      namespace: ai-engineering-docs
      port: 8080
      tools:
        - name: summarize-technical-document
          description: "Given the text of a Honda engineering document and its title, call the Anthropic API to produce a structured technical summary and post it to the specified Teams channel. Use for rapid review of vehicle specs, R&D reports, and supplier technical submissions."
          inputParameters:
            - name: document_text
              in: body
              type: string
              description: "The full text of the technical document to summarize."
            - name: document_title
              in: body
              type: string
              description: "The title of the engineering document."
            - name: target_channel_id
              in: body
              type: string
              description: "The Teams channel ID where the summary should be posted."
          steps:
            - name: generate-summary
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-3-5-sonnet-20241022"
                prompt: "Summarize this Honda engineering document in 3-5 bullet points covering: key specifications, technical decisions, open issues, and next steps. Document:\n\n{{document_text}}"
            - name: post-summary
              type: call
              call: "msteams-docs.post-channel-message"
              with:
                channel_id: "{{target_channel_id}}"
                message: "Technical Document Summary: {{document_title}}\n\n{{generate-summary.content}}"
  consumes:
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: msteams-docs
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When Azure Cost Management detects a spending anomaly in Honda's cloud subscriptions, creates a ServiceNow incident and notifies the FinOps Teams channel with overage and service details.

naftiko: "0.5"
info:
  label: "Azure Cost Anomaly Responder"
  description: "When Azure Cost Management detects a spending anomaly in Honda's cloud subscriptions, creates a ServiceNow incident and notifies the FinOps Teams channel with overage and service details."
  tags:
    - cloud
    - finops
    - azure
    - servicenow
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an Azure subscription ID, anomaly description, and estimated overage, create a ServiceNow incident and notify the FinOps channel in Teams. Use when Azure Cost Management alerts fire for budget or anomaly thresholds."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID where the cost anomaly was detected."
            - name: anomaly_description
              in: body
              type: string
              description: "Description of the anomaly including affected service and region."
            - name: estimated_overage_usd
              in: body
              type: string
              description: "Estimated monthly overage in USD."
          steps:
            - name: create-incident
              type: call
              call: "servicenow-cloud.create-incident"
              with:
                short_description: "Azure cost anomaly: {{anomaly_description}} — {{subscription_id}}"
                category: "cloud_cost"
                urgency: "2"
            - name: notify-finops
              type: call
              call: "msteams-finops.post-channel-message"
              with:
                channel_id: "$secrets.teams_finops_channel_id"
                message: "Azure cost anomaly | Subscription: {{subscription_id}} | Overage: ${{estimated_overage_usd}} | {{anomaly_description}} | Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow-cloud
      baseUri: "https://honda.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-finops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When an Azure budget threshold is breached, creates a ServiceNow ticket and alerts FinOps.

naftiko: "0.5"
info:
  label: "Azure Cost Budget Breach Notification"
  description: "When an Azure budget threshold is breached, creates a ServiceNow ticket and alerts FinOps."
  tags:
    - finops
    - azure
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finops
      port: 8080
      tools:
        - name: azure-cost-budget-breach-notification
          description: "When an Azure budget threshold is breached, creates a ServiceNow ticket and alerts FinOps."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-azure
              type: call
              call: azure.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-azure.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_finops_team_id"
                channel_id: "$secrets.teams_finops_channel_id"
                text: "Azure Cost Budget Breach Notification: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: records
          path: "/subscriptions"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When an Azure DevOps build fails, creates a Jira bug and notifies the development team in Teams.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Failure Notification"
  description: "When an Azure DevOps build fails, creates a Jira bug and notifies the development team in Teams."
  tags:
    - devops
    - azure-devops
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: azure-devops-build-failure-notification
          description: "When an Azure DevOps build fails, creates a Jira bug and notifies the development team in Teams."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-azdo
              type: call
              call: azdo.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-azdo.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_devops_team_id"
                channel_id: "$secrets.teams_devops_channel_id"
                text: "Azure DevOps Build Failure Notification: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: records
          path: "/pipelines"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When an Azure DevOps release is triggered, creates a ServiceNow standard change and notifies the CAB.

naftiko: "0.5"
info:
  label: "Azure DevOps Release to ServiceNow Change"
  description: "When an Azure DevOps release is triggered, creates a ServiceNow standard change and notifies the CAB."
  tags:
    - devops
    - azure-devops
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: azure-devops-release-to-servicenow-change
          description: "When an Azure DevOps release is triggered, creates a ServiceNow standard change and notifies the CAB."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-azdo
              type: call
              call: azdo.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-azdo.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_devops_team_id"
                channel_id: "$secrets.teams_devops_channel_id"
                text: "Azure DevOps Release to ServiceNow Change: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: records
          path: "/pipelines"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Azure Policy detects a non-compliant resource, creates a Jira remediation ticket.

naftiko: "0.5"
info:
  label: "Azure Resource Compliance to Jira Remediation"
  description: "When Azure Policy detects a non-compliant resource, creates a Jira remediation ticket."
  tags:
    - compliance
    - azure
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: azure-resource-compliance-to-jira-remediation
          description: "When Azure Policy detects a non-compliant resource, creates a Jira remediation ticket."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-azure
              type: call
              call: azure.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-azure.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_compliance_team_id"
                channel_id: "$secrets.teams_compliance_channel_id"
                text: "Azure Resource Compliance to Jira Remediation: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: records
          path: "/subscriptions"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Lists all resources within an Azure resource group.

naftiko: "0.5"
info:
  label: "Azure Resource Group Inventory"
  description: "Lists all resources within an Azure resource group."
  tags:
    - cloud
    - azure
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: cloud
      port: 8080
      tools:
        - name: list-resources
          description: "Given an Azure resource group, return the resource list."
          inputParameters:
            - name: resource_group
              in: body
              type: string
              description: "Azure resource group name."
          call: azure.list-resources
          with:
            resourceGroupName: "{{resource_group}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: resources
          path: "/subscriptions"
          inputParameters:
            - name: resourceGroupName
              in: path
          operations:
            - name: list-resources
              method: GET

When Azure Defender raises a security alert, creates a ServiceNow security incident and notifies the SOC team.

naftiko: "0.5"
info:
  label: "Azure Security Alert to Incident Response"
  description: "When Azure Defender raises a security alert, creates a ServiceNow security incident and notifies the SOC team."
  tags:
    - security
    - azure
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: azure-security-alert-to-incident-response
          description: "When Azure Defender raises a security alert, creates a ServiceNow security incident and notifies the SOC team."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-azure
              type: call
              call: azure.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-azure.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_security_team_id"
                channel_id: "$secrets.teams_security_channel_id"
                text: "Azure Security Alert to Incident Response: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: records
          path: "/subscriptions"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Triggers a Terraform Cloud workspace run to provision or update Azure infrastructure for Honda's connected-vehicle and EV platform services, then posts run status to the platform engineering Teams channel.

naftiko: "0.5"
info:
  label: "Azure Terraform Infrastructure Provisioning"
  description: "Triggers a Terraform Cloud workspace run to provision or update Azure infrastructure for Honda's connected-vehicle and EV platform services, then posts run status to the platform engineering Teams channel."
  tags:
    - cloud
    - infrastructure
    - azure
    - terraform
    - devops
    - automotive
capability:
  exposes:
    - type: mcp
      namespace: platform-engineering
      port: 8080
      tools:
        - name: run-terraform-workspace
          description: "Given a Terraform Cloud workspace ID and run message, trigger a plan-and-apply run for Honda's Azure infrastructure and notify the platform engineering channel in Teams with the run ID."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Terraform Cloud workspace ID for the Azure environment."
            - name: run_message
              in: body
              type: string
              description: "Description of the infrastructure change, e.g. Add EV charging API autoscaling group."
          steps:
            - name: trigger-run
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{workspace_id}}"
                message: "{{run_message}}"
            - name: notify-platform
              type: call
              call: "msteams-platform.post-channel-message"
              with:
                channel_id: "$secrets.teams_platform_channel_id"
                message: "Terraform run triggered | Workspace: {{workspace_id}} | Change: {{run_message}} | Run ID: {{trigger-run.run_id}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              method: POST
    - type: http
      namespace: msteams-platform
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks the current power state of an Azure virtual machine.

naftiko: "0.5"
info:
  label: "Azure VM Power State Check"
  description: "Checks the current power state of an Azure virtual machine."
  tags:
    - cloud
    - azure
    - compute
capability:
  exposes:
    - type: mcp
      namespace: cloud
      port: 8080
      tools:
        - name: get-vm-power-state
          description: "Given a VM name, return the current power state."
          inputParameters:
            - name: vm_name
              in: body
              type: string
              description: "Azure VM name."
          call: azure.get-vm-status
          with:
            vmName: "{{vm_name}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: vms
          path: "/virtualMachines"
          inputParameters:
            - name: vmName
              in: path
          operations:
            - name: get-vm-status
              method: GET

Retrieves the content and metadata of a Confluence page by page ID.

naftiko: "0.5"
info:
  label: "Confluence Page Content Lookup"
  description: "Retrieves the content and metadata of a Confluence page by page ID."
  tags:
    - knowledge-management
    - confluence
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: get-page-content
          description: "Given a Confluence page ID, return the title and body."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "Confluence page ID."
          call: confluence.get-page
          with:
            id: "{{page_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://honda.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-page
              method: GET

Syncs an updated Confluence runbook to a ServiceNow knowledge base article and notifies operations.

naftiko: "0.5"
info:
  label: "Confluence Runbook to ServiceNow KB Sync"
  description: "Syncs an updated Confluence runbook to a ServiceNow knowledge base article and notifies operations."
  tags:
    - knowledge-management
    - confluence
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: knowledge-management
      port: 8080
      tools:
        - name: confluence-runbook-to-servicenow-kb-sync
          description: "Syncs an updated Confluence runbook to a ServiceNow knowledge base article and notifies operations."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-confluence
              type: call
              call: confluence.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-confluence.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_knowledge_management_team_id"
                channel_id: "$secrets.teams_knowledge_management_channel_id"
                text: "Confluence Runbook to ServiceNow KB Sync: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://honda.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: records
          path: "/content"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Datadog triggers a critical alert, creates a ServiceNow P1 incident and pages the on-call engineer via PagerDuty.

naftiko: "0.5"
info:
  label: "Datadog Alert to ServiceNow Incident"
  description: "When Datadog triggers a critical alert, creates a ServiceNow P1 incident and pages the on-call engineer via PagerDuty."
  tags:
    - observability
    - datadog
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: datadog-alert-to-servicenow-incident
          description: "When Datadog triggers a critical alert, creates a ServiceNow P1 incident and pages the on-call engineer via PagerDuty."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-datadog
              type: call
              call: datadog.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-datadog.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_observability_team_id"
                channel_id: "$secrets.teams_observability_channel_id"
                text: "Datadog Alert to ServiceNow Incident: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: records
          path: "/events"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Datadog APM detects latency degradation, triggers a GitHub Actions rollback and creates a Jira incident.

naftiko: "0.5"
info:
  label: "Datadog APM Degradation to Rollback"
  description: "When Datadog APM detects latency degradation, triggers a GitHub Actions rollback and creates a Jira incident."
  tags:
    - observability
    - datadog
    - github
    - jira
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: datadog-apm-degradation-to-rollback
          description: "When Datadog APM detects latency degradation, triggers a GitHub Actions rollback and creates a Jira incident."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-datadog
              type: call
              call: datadog.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-github
              type: call
              call: github.create-record
              with:
                reference: "{{process-datadog.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_observability_team_id"
                channel_id: "$secrets.teams_observability_channel_id"
                text: "Datadog APM Degradation to Rollback: {{source_id}} | {{summary}} | Ref: {{create-github.id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: records
          path: "/events"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: records
          path: "/repos"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Datadog detects disk usage above 85 percent, creates a ServiceNow capacity request and notifies infra.

naftiko: "0.5"
info:
  label: "Datadog Disk Usage to Capacity Planning"
  description: "When Datadog detects disk usage above 85 percent, creates a ServiceNow capacity request and notifies infra."
  tags:
    - infrastructure
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: datadog-disk-usage-to-capacity-planning
          description: "When Datadog detects disk usage above 85 percent, creates a ServiceNow capacity request and notifies infra."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-datadog
              type: call
              call: datadog.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-datadog.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_infrastructure_team_id"
                channel_id: "$secrets.teams_infrastructure_channel_id"
                text: "Datadog Disk Usage to Capacity Planning: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: records
          path: "/events"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Datadog detects an error rate spike correlated with a feature flag, creates a Jira incident.

naftiko: "0.5"
info:
  label: "Datadog Error Rate to Feature Flag Disable"
  description: "When Datadog detects an error rate spike correlated with a feature flag, creates a Jira incident."
  tags:
    - observability
    - datadog
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: datadog-error-rate-to-feature-flag-disable
          description: "When Datadog detects an error rate spike correlated with a feature flag, creates a Jira incident."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-datadog
              type: call
              call: datadog.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-datadog.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_observability_team_id"
                channel_id: "$secrets.teams_observability_channel_id"
                text: "Datadog Error Rate to Feature Flag Disable: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: records
          path: "/events"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Datadog detects an anomalous log pattern, creates a ServiceNow investigation and pages SOC.

naftiko: "0.5"
info:
  label: "Datadog Log Anomaly to Security Investigation"
  description: "When Datadog detects an anomalous log pattern, creates a ServiceNow investigation and pages SOC."
  tags:
    - security
    - datadog
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: datadog-log-anomaly-to-security-investigation
          description: "When Datadog detects an anomalous log pattern, creates a ServiceNow investigation and pages SOC."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-datadog
              type: call
              call: datadog.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-datadog.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_security_team_id"
                channel_id: "$secrets.teams_security_channel_id"
                text: "Datadog Log Anomaly to Security Investigation: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: records
          path: "/events"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Datadog monitor fires for a manufacturing or connected-vehicle platform service, creates a ServiceNow incident and alerts the operations Teams channel with severity and affected system details.

naftiko: "0.5"
info:
  label: "Datadog Manufacturing System Alert Handler"
  description: "When a Datadog monitor fires for a manufacturing or connected-vehicle platform service, creates a ServiceNow incident and alerts the operations Teams channel with severity and affected system details."
  tags:
    - itsm
    - observability
    - datadog
    - servicenow
    - microsoft-teams
    - manufacturing
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: infra-ops
      port: 8080
      tools:
        - name: handle-infra-alert
          description: "Given a Datadog monitor ID, alert title, affected system, and severity, create a ServiceNow incident and notify the IT operations Teams channel. Use when Datadog detects failures in manufacturing execution, telematics, or EV platform services."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID that triggered."
            - name: alert_title
              in: body
              type: string
              description: "Human-readable alert title from Datadog."
            - name: affected_system
              in: body
              type: string
              description: "The affected system name, e.g. MES, Telematics-Platform, or EV-Charging-API."
            - name: severity
              in: body
              type: string
              description: "Alert severity: P1, P2, or P3."
          steps:
            - name: create-incident
              type: call
              call: "servicenow-infra.create-incident"
              with:
                short_description: "[{{severity}}] {{alert_title}} — {{affected_system}}"
                urgency: "1"
                category: "infrastructure"
            - name: notify-ops
              type: call
              call: "msteams-infra.post-channel-message"
              with:
                channel_id: "$secrets.teams_it_ops_channel_id"
                message: "ALERT {{severity}}: {{alert_title}} | System: {{affected_system}} | Monitor: {{monitor_id}} | Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow-infra
      baseUri: "https://honda.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-infra
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Queries the current health status of a monitored service in Datadog.

naftiko: "0.5"
info:
  label: "Datadog Service Status Check"
  description: "Queries the current health status of a monitored service in Datadog."
  tags:
    - observability
    - datadog
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-service-status
          description: "Given a Datadog service name, return the current monitor status."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "Name of the service to check."
          call: datadog.search-monitors
          with:
            query: "{{service_name}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/search"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-monitors
              method: GET

Retrieves SLO compliance data from Datadog for Honda's connected services and telematics platforms, publishing a weekly compliance digest to the engineering leadership Teams channel.

naftiko: "0.5"
info:
  label: "Datadog SLO Compliance Report"
  description: "Retrieves SLO compliance data from Datadog for Honda's connected services and telematics platforms, publishing a weekly compliance digest to the engineering leadership Teams channel."
  tags:
    - observability
    - slo
    - datadog
    - microsoft-teams
    - reporting
    - automotive
capability:
  exposes:
    - type: mcp
      namespace: observability-reporting
      port: 8080
      tools:
        - name: digest-slo-compliance
          description: "Given a Datadog SLO ID and time window, retrieve compliance percentage and error budget, then post a digest to the engineering leadership channel in Teams. Use weekly for connected-vehicle and telematics SLO reviews."
          inputParameters:
            - name: slo_id
              in: body
              type: string
              description: "The Datadog SLO ID to check, e.g. for telematics or connected-vehicle APIs."
            - name: time_window
              in: body
              type: string
              description: "The SLO rolling window, e.g. 7d or 30d."
          steps:
            - name: get-slo-history
              type: call
              call: "datadog.get-slo-history"
              with:
                slo_id: "{{slo_id}}"
            - name: post-digest
              type: call
              call: "msteams-slo.post-channel-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                message: "SLO Compliance Report | SLO: {{slo_id}} | Window: {{time_window}} | Compliance and error budget data retrieved from Datadog."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slo-history
          path: "/slo/{{slo_id}}/history"
          inputParameters:
            - name: slo_id
              in: path
          operations:
            - name: get-slo-history
              method: GET
    - type: http
      namespace: msteams-slo
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a Datadog synthetic test fails, creates a ServiceNow incident and triggers a PagerDuty alert.

naftiko: "0.5"
info:
  label: "Datadog Synthetic Failure to Incident"
  description: "When a Datadog synthetic test fails, creates a ServiceNow incident and triggers a PagerDuty alert."
  tags:
    - observability
    - datadog
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: datadog-synthetic-failure-to-incident
          description: "When a Datadog synthetic test fails, creates a ServiceNow incident and triggers a PagerDuty alert."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-datadog
              type: call
              call: datadog.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-datadog.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_observability_team_id"
                channel_id: "$secrets.teams_observability_channel_id"
                text: "Datadog Synthetic Failure to Incident: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: records
          path: "/events"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves the health status of a monitored host in Dynatrace.

naftiko: "0.5"
info:
  label: "Dynatrace Host Health Lookup"
  description: "Retrieves the health status of a monitored host in Dynatrace."
  tags:
    - observability
    - dynatrace
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-host-health
          description: "Given a Dynatrace host ID, return the health state."
          inputParameters:
            - name: host_id
              in: body
              type: string
              description: "Dynatrace host entity ID."
          call: dynatrace.get-host
          with:
            entityId: "{{host_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://api.example.com/v1"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: entities
          path: "/entities"
          inputParameters:
            - name: entityId
              in: path
          operations:
            - name: get-host
              method: GET

When a Honda associate's termination is confirmed in Workday, creates a ServiceNow offboarding ticket for access revocation and notifies the IT operations team via Teams.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "When a Honda associate's termination is confirmed in Workday, creates a ServiceNow offboarding ticket for access revocation and notifies the IT operations team via Teams."
  tags:
    - hr
    - offboarding
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID and termination date, open a ServiceNow access-revocation ticket and notify the IT operations team in Teams. Use when an associate's termination is confirmed in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the departing associate."
            - name: termination_date
              in: body
              type: string
              description: "The associate'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: create-offboarding-ticket
              type: call
              call: "servicenow-off.create-incident"
              with:
                short_description: "Offboarding: {{get-worker.display_name}} — last day {{termination_date}}"
                category: "hr_offboarding"
                description: "Associate {{get-worker.display_name}} ({{employee_id}}) terminates {{termination_date}}. Revoke all system, network, and building access."
            - name: notify-it-ops
              type: call
              call: "msteams-off.post-channel-message"
              with:
                channel_id: "$secrets.teams_it_ops_channel_id"
                message: "Offboarding initiated | Associate: {{get-worker.display_name}} | Last day: {{termination_date}} | Ticket: {{create-offboarding-ticket.number}} | Begin access revocation."
  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: "/honda/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow-off
      baseUri: "https://honda.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-off
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a new associate is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint document folder, and sends a Microsoft Teams welcome message with role and start date details.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new associate is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint document folder, and sends a Microsoft Teams welcome message with role and start date details."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence by opening a ServiceNow ticket, provisioning a SharePoint folder, and sending a Teams welcome message to the new associate."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new Honda associate."
            - name: start_date
              in: body
              type: string
              description: "The associate's start date in YYYY-MM-DD format."
            - name: division
              in: body
              type: string
              description: "The Honda division or business unit, e.g. HAM (Honda Automobiles) or HRDI (R&D)."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New associate onboarding: {{get-worker.display_name}} — {{division}}"
                category: "hr_onboarding"
                assigned_to: "IT_Onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "honda-hr-onboarding"
                folder_path: "OnboardingDocs/{{division}}/{{get-worker.display_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-worker.work_email}}"
                message: "Welcome to Honda, {{get-worker.first_name}}! You are joining {{division}} on {{start_date}}. Your onboarding ticket: {{create-ticket.number}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/honda/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{{site_id}}/drive/root/children"
          inputParameters:
            - name: site_id
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a GitHub Actions workflow fails on a main or release branch, creates a ServiceNow incident, opens a GitHub issue for the engineering team, and alerts the engineering Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Actions CI/CD Failure Handler"
  description: "When a GitHub Actions workflow fails on a main or release branch, creates a ServiceNow incident, opens a GitHub issue for the engineering team, and alerts the engineering Teams channel."
  tags:
    - devops
    - cicd
    - github
    - servicenow
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: devops-cicd
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions workflow run ID, repository, and branch, create a ServiceNow incident, open a GitHub issue, and alert the engineering Teams channel. Use when a protected branch CI/CD workflow fails."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository in owner/repo format, e.g. honda-tech/ev-platform."
            - name: workflow_name
              in: body
              type: string
              description: "The GitHub Actions workflow name that failed."
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions workflow run ID."
            - name: branch
              in: body
              type: string
              description: "The branch name, e.g. main or release/2025-q2."
            - name: run_url
              in: body
              type: string
              description: "Direct URL to the failed workflow run."
          steps:
            - name: create-incident
              type: call
              call: "servicenow-cicd.create-incident"
              with:
                short_description: "CI failure: {{repository}} / {{branch}} — {{workflow_name}}"
                category: "devops"
                urgency: "2"
            - name: open-github-issue
              type: call
              call: "github.create-issue"
              with:
                repository: "{{repository}}"
                title: "[CI Failure] {{workflow_name}} on {{branch}} (Run {{run_id}})"
                body: "Workflow {{workflow_name}} failed on {{branch}}.\n\nRun ID: {{run_id}}\nRun URL: {{run_url}}\nServiceNow Incident: {{create-incident.number}}"
            - name: alert-engineering
              type: call
              call: "msteams-cicd.post-channel-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                message: "CI Failure | Repo: {{repository}} | Branch: {{branch}} | Workflow: {{workflow_name}} | Incident: {{create-incident.number}} | Issue: {{open-github-issue.number}} | URL: {{run_url}}"
  consumes:
    - type: http
      namespace: servicenow-cicd
      baseUri: "https://honda.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: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: issues
          path: "/repos/{{repository}}/issues"
          inputParameters:
            - name: repository
              in: path
          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/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When GitHub Actions tests fail, creates a Jira bug and alerts the QA channel in Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub Actions Test Failure to Teams Alert"
  description: "When GitHub Actions tests fail, creates a Jira bug and alerts the QA channel in Microsoft Teams."
  tags:
    - devops
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: github-actions-test-failure-to-teams-alert
          description: "When GitHub Actions tests fail, creates a Jira bug and alerts the QA channel in Microsoft Teams."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-github
              type: call
              call: github.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-github.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_devops_team_id"
                channel_id: "$secrets.teams_devops_channel_id"
                text: "GitHub Actions Test Failure to Teams Alert: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: records
          path: "/repos"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When code scanning finds a high-severity issue, creates a Jira remediation ticket and notifies security.

naftiko: "0.5"
info:
  label: "GitHub Code Scanning to Jira Remediation"
  description: "When code scanning finds a high-severity issue, creates a Jira remediation ticket and notifies security."
  tags:
    - security
    - github
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: github-code-scanning-to-jira-remediation
          description: "When code scanning finds a high-severity issue, creates a Jira remediation ticket and notifies security."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-github
              type: call
              call: github.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-github.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_security_team_id"
                channel_id: "$secrets.teams_security_channel_id"
                text: "GitHub Code Scanning to Jira Remediation: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: records
          path: "/repos"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Dependabot raises a critical vulnerability, creates a ServiceNow security change and notifies AppSec.

naftiko: "0.5"
info:
  label: "GitHub Dependabot Alert to Security Review"
  description: "When Dependabot raises a critical vulnerability, creates a ServiceNow security change and notifies AppSec."
  tags:
    - security
    - github
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: github-dependabot-alert-to-security-review
          description: "When Dependabot raises a critical vulnerability, creates a ServiceNow security change and notifies AppSec."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-github
              type: call
              call: github.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-github.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_security_team_id"
                channel_id: "$secrets.teams_security_channel_id"
                text: "GitHub Dependabot Alert to Security Review: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: records
          path: "/repos"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a GitHub pull request is merged, transitions the linked Jira issue to Done and posts a release note to Confluence.

naftiko: "0.5"
info:
  label: "GitHub PR Merge to Jira Transition"
  description: "When a GitHub pull request is merged, transitions the linked Jira issue to Done and posts a release note to Confluence."
  tags:
    - devops
    - github
    - jira
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: github-pr-merge-to-jira-transition
          description: "When a GitHub pull request is merged, transitions the linked Jira issue to Done and posts a release note to Confluence."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-github
              type: call
              call: github.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-github.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_devops_team_id"
                channel_id: "$secrets.teams_devops_channel_id"
                text: "GitHub PR Merge to Jira Transition: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: records
          path: "/repos"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves open pull requests from a GitHub repository that are awaiting review for more than 24 hours and posts a triage summary to the engineering Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Pull Request Code Review Triage"
  description: "Retrieves open pull requests from a GitHub repository that are awaiting review for more than 24 hours and posts a triage summary to the engineering Teams channel."
  tags:
    - devops
    - github
    - code-review
    - microsoft-teams
    - engineering
capability:
  exposes:
    - type: mcp
      namespace: devops-reviews
      port: 8080
      tools:
        - name: triage-stale-pull-requests
          description: "Given a GitHub repository and a staleness threshold in hours, list open pull requests awaiting review and post a triage digest to the engineering Teams channel. Use for daily PR backlog reviews."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository in owner/repo format, e.g. honda-tech/connected-services."
            - name: stale_hours
              in: body
              type: integer
              description: "Number of hours before a PR is considered stale, e.g. 24."
          steps:
            - name: list-prs
              type: call
              call: "github-prs.list-pull-requests"
              with:
                repository: "{{repository}}"
            - name: post-triage
              type: call
              call: "msteams-reviews.post-channel-message"
              with:
                channel_id: "$secrets.teams_engineering_channel_id"
                message: "Stale PR Triage | Repo: {{repository}} | PRs awaiting review >{{stale_hours}}h | Please review and assign reviewers to unblocked PRs."
  consumes:
    - type: http
      namespace: github-prs
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: pull-requests
          path: "/repos/{{repository}}/pulls"
          inputParameters:
            - name: repository
              in: path
            - name: state
              in: query
          operations:
            - name: list-pull-requests
              method: GET
    - type: http
      namespace: msteams-reviews
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves repository metadata from GitHub including language and default branch.

naftiko: "0.5"
info:
  label: "GitHub Repository Details Lookup"
  description: "Retrieves repository metadata from GitHub including language and default branch."
  tags:
    - devops
    - github
    - repositories
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: get-repository-details
          description: "Given an org and repo name, return the primary language."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository name."
          call: github.get-repo
          with:
            repo: "{{repo}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-repo
              method: GET

Retrieves open Dependabot security alerts from a GitHub repository, creates a ServiceNow security incident for critical vulnerabilities, and posts a triage summary to the security Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Repository Security Scan Triage"
  description: "Retrieves open Dependabot security alerts from a GitHub repository, creates a ServiceNow security incident for critical vulnerabilities, and posts a triage summary to the security Teams channel."
  tags:
    - devops
    - security
    - github
    - servicenow
    - microsoft-teams
    - vulnerability-management
capability:
  exposes:
    - type: mcp
      namespace: devops-security
      port: 8080
      tools:
        - name: triage-security-alerts
          description: "Given a GitHub repository, retrieve open Dependabot security alerts at critical or high severity, create a ServiceNow security incident, and post a triage summary to the security Teams channel. Use weekly for software supply chain security reviews."
          inputParameters:
            - name: repository
              in: body
              type: string
              description: "The GitHub repository in owner/repo format, e.g. honda-tech/ev-charging-api."
            - name: severity
              in: body
              type: string
              description: "Minimum severity to include: critical, high, or medium."
          steps:
            - name: list-alerts
              type: call
              call: "github-security.list-dependabot-alerts"
              with:
                repository: "{{repository}}"
                severity: "{{severity}}"
            - name: create-security-incident
              type: call
              call: "servicenow-security.create-incident"
              with:
                short_description: "Security vulnerability triage: {{repository}} — {{severity}}+ severity"
                category: "security"
                urgency: "2"
            - name: post-triage
              type: call
              call: "msteams-security.post-channel-message"
              with:
                channel_id: "$secrets.teams_security_channel_id"
                message: "Security Alert Triage | Repo: {{repository}} | Severity: {{severity}}+ | Dependabot alerts retrieved. Incident: {{create-security-incident.number}} | Please review and patch affected dependencies."
  consumes:
    - type: http
      namespace: github-security
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: dependabot-alerts
          path: "/repos/{{repository}}/dependabot/alerts"
          inputParameters:
            - name: repository
              in: path
            - name: severity
              in: query
          operations:
            - name: list-dependabot-alerts
              method: GET
    - type: http
      namespace: servicenow-security
      baseUri: "https://honda.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-security
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves the current stage and amount of a HubSpot deal.

naftiko: "0.5"
info:
  label: "HubSpot Deal Stage Lookup"
  description: "Retrieves the current stage and amount of a HubSpot deal."
  tags:
    - crm
    - hubspot
    - sales
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-deal-stage
          description: "Given a HubSpot deal ID, return the deal stage."
          inputParameters:
            - name: deal_id
              in: body
              type: string
              description: "HubSpot deal ID."
          call: hubspot.get-deal
          with:
            dealId: "{{deal_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: deals
          path: "/objects/deals"
          inputParameters:
            - name: dealId
              in: path
          operations:
            - name: get-deal
              method: GET

When a HubSpot form is submitted, creates a Salesforce lead and notifies the SDR team.

naftiko: "0.5"
info:
  label: "HubSpot Form Submission to Salesforce Lead"
  description: "When a HubSpot form is submitted, creates a Salesforce lead and notifies the SDR team."
  tags:
    - marketing
    - hubspot
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: hubspot-form-submission-to-salesforce-lead
          description: "When a HubSpot form is submitted, creates a Salesforce lead and notifies the SDR team."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-hubspot
              type: call
              call: hubspot.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-salesforce
              type: call
              call: salesforce.create-record
              with:
                reference: "{{process-hubspot.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_marketing_team_id"
                channel_id: "$secrets.teams_marketing_channel_id"
                text: "HubSpot Form Submission to Salesforce Lead: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: records
          path: "/objects"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When all stories in a Jira epic are completed, generates a Confluence summary and notifies stakeholders.

naftiko: "0.5"
info:
  label: "Jira Epic Completion to Stakeholder Update"
  description: "When all stories in a Jira epic are completed, generates a Confluence summary and notifies stakeholders."
  tags:
    - project-management
    - jira
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: project-management
      port: 8080
      tools:
        - name: jira-epic-completion-to-stakeholder-update
          description: "When all stories in a Jira epic are completed, generates a Confluence summary and notifies stakeholders."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-jira
              type: call
              call: jira.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-confluence
              type: call
              call: confluence.create-record
              with:
                reference: "{{process-jira.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_project_management_team_id"
                channel_id: "$secrets.teams_project_management_channel_id"
                text: "Jira Epic Completion to Stakeholder Update: {{source_id}} | {{summary}} | Ref: {{create-confluence.id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://honda.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: records
          path: "/content"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves the current status, assignee, and priority of a Jira issue.

naftiko: "0.5"
info:
  label: "Jira Issue Status Lookup"
  description: "Retrieves the current status, assignee, and priority of a Jira issue."
  tags:
    - project-management
    - jira
    - issue-tracking
capability:
  exposes:
    - type: mcp
      namespace: project-management
      port: 8080
      tools:
        - name: get-issue-status
          description: "Given a Jira issue key, return the current status."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "Jira issue key."
          call: jira.get-issue
          with:
            issue_id: "{{issue_key}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          inputParameters:
            - name: issue_id
              in: path
          operations:
            - name: get-issue
              method: GET

When a Jira release is published, generates a changelog in Confluence and notifies the product Teams channel.

naftiko: "0.5"
info:
  label: "Jira Release to Confluence Changelog"
  description: "When a Jira release is published, generates a changelog in Confluence and notifies the product Teams channel."
  tags:
    - release-management
    - jira
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: release-management
      port: 8080
      tools:
        - name: jira-release-to-confluence-changelog
          description: "When a Jira release is published, generates a changelog in Confluence and notifies the product Teams channel."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-jira
              type: call
              call: jira.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-confluence
              type: call
              call: confluence.create-record
              with:
                reference: "{{process-jira.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_release_management_team_id"
                channel_id: "$secrets.teams_release_management_channel_id"
                text: "Jira Release to Confluence Changelog: {{source_id}} | {{summary}} | Ref: {{create-confluence.id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://honda.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: records
          path: "/content"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a LinkedIn campaign generates leads, imports them into Salesforce and notifies the sales team.

naftiko: "0.5"
info:
  label: "LinkedIn Campaign to Salesforce Lead Import"
  description: "When a LinkedIn campaign generates leads, imports them into Salesforce and notifies the sales team."
  tags:
    - marketing
    - linkedin
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: linkedin-campaign-to-salesforce-lead-import
          description: "When a LinkedIn campaign generates leads, imports them into Salesforce and notifies the sales team."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-linkedin
              type: call
              call: linkedin.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-salesforce
              type: call
              call: salesforce.create-record
              with:
                reference: "{{process-linkedin.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_marketing_team_id"
                channel_id: "$secrets.teams_marketing_channel_id"
                text: "LinkedIn Campaign to Salesforce Lead Import: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: records
          path: "/campaigns"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves engagement and follower metrics for Honda's LinkedIn sponsored content and employer brand posts over the past 30 days, posting a digest to the talent acquisition Teams channel.

naftiko: "0.5"
info:
  label: "LinkedIn Employer Brand Campaign Digest"
  description: "Retrieves engagement and follower metrics for Honda's LinkedIn sponsored content and employer brand posts over the past 30 days, posting a digest to the talent acquisition Teams channel."
  tags:
    - marketing
    - hr
    - linkedin
    - employer-brand
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: talent-brand
      port: 8080
      tools:
        - name: digest-linkedin-employer-brand
          description: "Retrieve LinkedIn follower statistics and post engagement metrics for Honda's company page, then post a digest to the talent acquisition channel in Teams. Use for monthly employer brand performance reviews."
          inputParameters:
            - name: organization_id
              in: body
              type: string
              description: "Honda's LinkedIn organization URN ID."
            - name: date_range_days
              in: body
              type: integer
              description: "Number of days to include in the report, e.g. 30."
          steps:
            - name: get-follower-stats
              type: call
              call: "linkedin.get-follower-statistics"
              with:
                organization_id: "{{organization_id}}"
            - name: post-digest
              type: call
              call: "msteams-talent.post-channel-message"
              with:
                channel_id: "$secrets.teams_talent_channel_id"
                message: "LinkedIn Employer Brand Digest | Honda | Last {{date_range_days}} days | Follower and engagement stats retrieved. Full report available in LinkedIn Campaign Manager."
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: follower-statistics
          path: "/organizationalEntityFollowerStatistics"
          inputParameters:
            - name: organization_id
              in: query
          operations:
            - name: get-follower-statistics
              method: GET
    - type: http
      namespace: msteams-talent
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves impression, reach, and lead generation metrics from Meta Ads for Honda's vehicle launch campaigns and posts a weekly performance digest to the digital marketing Teams channel.

naftiko: "0.5"
info:
  label: "Meta Automotive Campaign Performance Digest"
  description: "Retrieves impression, reach, and lead generation metrics from Meta Ads for Honda's vehicle launch campaigns and posts a weekly performance digest to the digital marketing Teams channel."
  tags:
    - marketing
    - social
    - meta
    - microsoft-teams
    - digital-marketing
    - automotive
capability:
  exposes:
    - type: mcp
      namespace: digital-marketing
      port: 8080
      tools:
        - name: digest-meta-auto-campaigns
          description: "Given a Meta ad account ID and date preset, retrieve vehicle campaign metrics (impressions, reach, leads, cost-per-lead) and post a digest to the digital marketing Teams channel."
          inputParameters:
            - name: ad_account_id
              in: body
              type: string
              description: "The Meta ad account ID for Honda's automotive campaigns."
            - name: date_preset
              in: body
              type: string
              description: "Meta Insights date preset, e.g. last_7d or last_30d."
          steps:
            - name: get-insights
              type: call
              call: "meta.get-ad-insights"
              with:
                ad_account_id: "{{ad_account_id}}"
                date_preset: "{{date_preset}}"
            - name: post-digest
              type: call
              call: "msteams-mktg.post-channel-message"
              with:
                channel_id: "$secrets.teams_marketing_channel_id"
                message: "Meta Automotive Campaign Digest | Account: {{ad_account_id}} | Period: {{date_preset}} | Insights retrieved. Full breakdown in Ads Manager."
  consumes:
    - type: http
      namespace: meta
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_access_token"
      resources:
        - name: ad-insights
          path: "/{{ad_account_id}}/insights"
          inputParameters:
            - name: ad_account_id
              in: path
            - name: date_preset
              in: query
          operations:
            - name: get-ad-insights
              method: GET
    - type: http
      namespace: msteams-mktg
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Lists all channels in a Microsoft Teams team.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel List"
  description: "Lists all channels in a Microsoft Teams team."
  tags:
    - collaboration
    - microsoft-teams
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: list-team-channels
          description: "Given a Teams team ID, return the channel list."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "Microsoft Teams team ID."
          call: msteams.list-channels
          with:
            teamId: "{{team_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://api.example.com/v1"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams"
          inputParameters:
            - name: teamId
              in: path
          operations:
            - name: list-channels
              method: GET

When Okta detects suspicious login activity, creates a ServiceNow security incident and alerts SOC via PagerDuty.

naftiko: "0.5"
info:
  label: "Okta Suspicious Activity to SOC Alert"
  description: "When Okta detects suspicious login activity, creates a ServiceNow security incident and alerts SOC via PagerDuty."
  tags:
    - security
    - okta
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: okta-suspicious-activity-to-soc-alert
          description: "When Okta detects suspicious login activity, creates a ServiceNow security incident and alerts SOC via PagerDuty."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-okta
              type: call
              call: okta.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-okta.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_security_team_id"
                channel_id: "$secrets.teams_security_channel_id"
                text: "Okta Suspicious Activity to SOC Alert: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://honda.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: records
          path: "/users"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves the current status and last login of an Okta user.

naftiko: "0.5"
info:
  label: "Okta User Status Lookup"
  description: "Retrieves the current status and last login of an Okta user."
  tags:
    - identity
    - okta
    - security
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user-status
          description: "Given an email, retrieve the Okta user status."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Okta user email."
          call: okta.get-user
          with:
            login: "{{email}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://honda.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: get-user
              method: GET

When PagerDuty creates a major incident, posts a status update to Confluence and creates a timeline page.

naftiko: "0.5"
info:
  label: "PagerDuty Incident to Statuspage Update"
  description: "When PagerDuty creates a major incident, posts a status update to Confluence and creates a timeline page."
  tags:
    - incident-management
    - pagerduty
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: incident-management
      port: 8080
      tools:
        - name: pagerduty-incident-to-statuspage-update
          description: "When PagerDuty creates a major incident, posts a status update to Confluence and creates a timeline page."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-pagerduty
              type: call
              call: pagerduty.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-confluence
              type: call
              call: confluence.create-record
              with:
                reference: "{{process-pagerduty.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_incident_management_team_id"
                channel_id: "$secrets.teams_incident_management_channel_id"
                text: "PagerDuty Incident to Statuspage Update: {{source_id}} | {{summary}} | Ref: {{create-confluence.id}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: records
          path: "/incidents"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://honda.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: records
          path: "/content"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves the current on-call engineer for a PagerDuty escalation policy.

naftiko: "0.5"
info:
  label: "PagerDuty On-Call Lookup"
  description: "Retrieves the current on-call engineer for a PagerDuty escalation policy."
  tags:
    - incident-management
    - pagerduty
    - on-call
capability:
  exposes:
    - type: mcp
      namespace: incident-management
      port: 8080
      tools:
        - name: get-on-call-engineer
          description: "Given a PagerDuty escalation policy ID, return the on-call engineer."
          inputParameters:
            - name: policy_id
              in: body
              type: string
              description: "PagerDuty escalation policy ID."
          call: pagerduty.get-on-calls
          with:
            escalation_policy_ids: "{{policy_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: oncalls
          path: "/oncalls"
          inputParameters:
            - name: escalation_policy_ids
              in: query
          operations:
            - name: get-on-calls
              method: GET

Returns the current global headcount breakdown by division, department, and cost center from Workday for workforce planning and finance reporting.

naftiko: "0.5"
info:
  label: "Payroll Headcount Snapshot"
  description: "Returns the current global headcount breakdown by division, department, and cost center from Workday for workforce planning and finance reporting."
  tags:
    - hr
    - finance
    - reporting
    - workday
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Returns headcount grouped by division, department, and cost center from Workday. Use for workforce planning, labor cost analysis, and quarterly finance headcount submissions."
          call: "workday-hc.headcount-report"
          outputParameters:
            - name: employees
              type: array
              mapping: "$.Report_Entry"
              items:
                - name: employee_id
                  type: string
                  mapping: "$.Employee_ID"
                - name: full_name
                  type: string
                  mapping: "$.Employee_Name"
                - name: division
                  type: string
                  mapping: "$.Division"
                - name: department
                  type: string
                  mapping: "$.Department"
                - name: cost_center
                  type: string
                  mapping: "$.Cost_Center"
                - name: employment_type
                  type: string
                  mapping: "$.Employment_Type"
  consumes:
    - type: http
      namespace: workday-hc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/service/customreport2/honda"
      authentication:
        type: basic
        username: "$secrets.workday_report_user"
        password: "$secrets.workday_report_password"
      resources:
        - name: headcount
          path: "/Headcount_By_Division_Department"
          operations:
            - name: headcount-report
              method: GET
              outputRawFormat: json

Checks the last refresh status of a Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Status"
  description: "Checks the last refresh status of a Power BI dataset."
  tags:
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-refresh-status
          description: "Given a Power BI dataset ID, return the refresh status."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID."
          call: powerbi.get-refresh-history
          with:
            datasetId: "{{dataset_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.example.com/v1"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          inputParameters:
            - name: datasetId
              in: path
          operations:
            - name: get-refresh-history
              method: GET

When a Power BI refresh fails, creates a Jira ticket and posts error details to the analytics Teams channel.

naftiko: "0.5"
info:
  label: "Power BI Report Failure to Jira Ticket"
  description: "When a Power BI refresh fails, creates a Jira ticket and posts error details to the analytics Teams channel."
  tags:
    - analytics
    - power-bi
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: power-bi-report-failure-to-jira-ticket
          description: "When a Power BI refresh fails, creates a Jira ticket and posts error details to the analytics Teams channel."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-powerbi
              type: call
              call: powerbi.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-powerbi.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_analytics_team_id"
                channel_id: "$secrets.teams_analytics_channel_id"
                text: "Power BI Report Failure to Jira Ticket: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: records
          path: "/datasets"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Triggers a Power BI dataset refresh for the global vehicle sales dashboard and posts a confirmation with the refresh timestamp to the sales operations Teams channel.

naftiko: "0.5"
info:
  label: "Power BI Vehicle Sales Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for the global vehicle sales dashboard and posts a confirmation with the refresh timestamp to the sales operations Teams channel."
  tags:
    - data-analytics
    - reporting
    - power-bi
    - microsoft-teams
    - sales
    - automotive
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: refresh-vehicle-sales-dashboard
          description: "Given a Power BI workspace ID and dataset ID, trigger a vehicle sales dashboard refresh and notify the sales operations channel in Teams. Use daily after regional sales data loads."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID containing the vehicle sales dataset."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID for the vehicle sales report."
          steps:
            - name: trigger-refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-sales-ops
              type: call
              call: "msteams-sales.post-channel-message"
              with:
                channel_id: "$secrets.teams_sales_ops_channel_id"
                message: "Vehicle Sales dashboard refresh triggered for dataset {{dataset_id}}. Updated data available shortly in Power BI."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams-sales
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Escalates a high-severity Salesforce case by creating a GitHub issue and paging engineering on-call via PagerDuty.

naftiko: "0.5"
info:
  label: "Salesforce Case Escalation to Engineering"
  description: "Escalates a high-severity Salesforce case by creating a GitHub issue and paging engineering on-call via PagerDuty."
  tags:
    - support
    - salesforce
    - github
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: support
      port: 8080
      tools:
        - name: salesforce-case-escalation-to-engineering
          description: "Escalates a high-severity Salesforce case by creating a GitHub issue and paging engineering on-call via PagerDuty."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-salesforce
              type: call
              call: salesforce.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-github
              type: call
              call: github.create-record
              with:
                reference: "{{process-salesforce.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_support_team_id"
                channel_id: "$secrets.teams_support_channel_id"
                text: "Salesforce Case Escalation to Engineering: {{source_id}} | {{summary}} | Ref: {{create-github.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: records
          path: "/repos"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Salesforce predicts churn risk, creates a CS Jira task and logs the intervention.

naftiko: "0.5"
info:
  label: "Salesforce Churn Signal to Retention Workflow"
  description: "When Salesforce predicts churn risk, creates a CS Jira task and logs the intervention."
  tags:
    - crm
    - salesforce
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: salesforce-churn-signal-to-retention-workflow
          description: "When Salesforce predicts churn risk, creates a CS Jira task and logs the intervention."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-salesforce
              type: call
              call: salesforce.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-salesforce.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_crm_team_id"
                channel_id: "$secrets.teams_crm_channel_id"
                text: "Salesforce Churn Signal to Retention Workflow: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves a Salesforce contact by email address with account association.

naftiko: "0.5"
info:
  label: "Salesforce Contact Lookup"
  description: "Retrieves a Salesforce contact by email address with account association."
  tags:
    - crm
    - salesforce
    - contacts
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-contact-by-email
          description: "Given an email, retrieve the matching Salesforce contact."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Contact email address."
          call: salesforce.query-contacts
          with:
            q: "{{email}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-contacts
              method: GET

Retrieves a Honda dealer account from Salesforce along with its recent vehicle order opportunities to surface relationship health metrics for the regional sales team.

naftiko: "0.5"
info:
  label: "Salesforce Dealer Account Health Check"
  description: "Retrieves a Honda dealer account from Salesforce along with its recent vehicle order opportunities to surface relationship health metrics for the regional sales team."
  tags:
    - sales
    - crm
    - salesforce
    - dealer-management
    - automotive
capability:
  exposes:
    - type: mcp
      namespace: dealer-crm
      port: 8080
      tools:
        - name: get-dealer-account-health
          description: "Given a Salesforce dealer account ID, retrieve account details and the five most recent vehicle order opportunities. Use for dealer relationship reviews and regional sales performance monitoring."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID for the Honda dealer."
          steps:
            - name: get-account
              type: call
              call: "salesforce-acct.get-account"
              with:
                account_id: "{{account_id}}"
            - name: get-opportunities
              type: call
              call: "salesforce-opps.list-opportunities"
              with:
                account_id: "{{account_id}}"
  consumes:
    - type: http
      namespace: salesforce-acct
      baseUri: "https://honda.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
    - type: http
      namespace: salesforce-opps
      baseUri: "https://honda.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: list-opportunities
              method: GET

When a high-value Salesforce lead submits a feature request, creates a Jira ticket and notifies the product team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Lead to Jira Feature Request"
  description: "When a high-value Salesforce lead submits a feature request, creates a Jira ticket and notifies the product team in Microsoft Teams."
  tags:
    - crm
    - salesforce
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: salesforce-lead-to-jira-feature-request
          description: "When a high-value Salesforce lead submits a feature request, creates a Jira ticket and notifies the product team in Microsoft Teams."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-salesforce
              type: call
              call: salesforce.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-salesforce.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_crm_team_id"
                channel_id: "$secrets.teams_crm_channel_id"
                text: "Salesforce Lead to Jira Feature Request: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Salesforce CPQ quote is approved, sends it for signature and updates Salesforce.

naftiko: "0.5"
info:
  label: "Salesforce Quote Approval to Contract Send"
  description: "When a Salesforce CPQ quote is approved, sends it for signature and updates Salesforce."
  tags:
    - quote-to-cash
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quote-to-cash
      port: 8080
      tools:
        - name: salesforce-quote-approval-to-contract-send
          description: "When a Salesforce CPQ quote is approved, sends it for signature and updates Salesforce."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-salesforce
              type: call
              call: salesforce.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-msteams
              type: call
              call: msteams.create-record
              with:
                reference: "{{process-salesforce.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_quote_to_cash_team_id"
                channel_id: "$secrets.teams_quote_to_cash_channel_id"
                text: "Salesforce Quote Approval to Contract Send: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: records
          path: "/teams"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Salesforce opportunity shows renewal risk, creates a Jira CS task and alerts the account team.

naftiko: "0.5"
info:
  label: "Salesforce Renewal Risk to Customer Success"
  description: "When a Salesforce opportunity shows renewal risk, creates a Jira CS task and alerts the account team."
  tags:
    - crm
    - salesforce
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: salesforce-renewal-risk-to-customer-success
          description: "When a Salesforce opportunity shows renewal risk, creates a Jira CS task and alerts the account team."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-salesforce
              type: call
              call: salesforce.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-salesforce.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_crm_team_id"
                channel_id: "$secrets.teams_crm_channel_id"
                text: "Salesforce Renewal Risk to Customer Success: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a territory assignment changes, updates lead routing and notifies affected reps.

naftiko: "0.5"
info:
  label: "Salesforce Territory Change to Routing Update"
  description: "When a territory assignment changes, updates lead routing and notifies affected reps."
  tags:
    - crm
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: salesforce-territory-change-to-routing-update
          description: "When a territory assignment changes, updates lead routing and notifies affected reps."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-salesforce
              type: call
              call: salesforce.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-msteams
              type: call
              call: msteams.create-record
              with:
                reference: "{{process-salesforce.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_crm_team_id"
                channel_id: "$secrets.teams_crm_channel_id"
                text: "Salesforce Territory Change to Routing Update: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: records
          path: "/teams"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Salesforce opportunity is Closed Won, creates a SAP sales order and confirms in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Win to SAP Sales Order Creation"
  description: "When a Salesforce opportunity is Closed Won, creates a SAP sales order and confirms in Microsoft Teams."
  tags:
    - order-management
    - salesforce
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: order-management
      port: 8080
      tools:
        - name: salesforce-win-to-sap-sales-order-creation
          description: "When a Salesforce opportunity is Closed Won, creates a SAP sales order and confirms in Microsoft Teams."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-salesforce
              type: call
              call: salesforce.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-sap
              type: call
              call: sap.create-record
              with:
                reference: "{{process-salesforce.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_order_management_team_id"
                channel_id: "$secrets.teams_order_management_channel_id"
                text: "Salesforce Win to SAP Sales Order Creation: {{source_id}} | {{summary}} | Ref: {{create-sap.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/A_BusinessPartner"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves a contract summary from SAP Ariba by contract ID.

naftiko: "0.5"
info:
  label: "SAP Ariba Contract Lookup"
  description: "Retrieves a contract summary from SAP Ariba by contract ID."
  tags:
    - procurement
    - sap-ariba
    - contracts
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-contract-summary
          description: "Given a SAP Ariba contract ID, return the status."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "SAP Ariba contract ID."
          call: ariba.get-contract
          with:
            contractId: "{{contract_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://api.example.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: contracts
          path: "/contracts"
          inputParameters:
            - name: contractId
              in: path
          operations:
            - name: get-contract
              method: GET

Retrieves category-level procurement spend data from SAP Ariba for the current quarter and posts a spend summary to the procurement leadership Teams channel for category management review.

naftiko: "0.5"
info:
  label: "SAP Ariba Spend Analytics Digest"
  description: "Retrieves category-level procurement spend data from SAP Ariba for the current quarter and posts a spend summary to the procurement leadership Teams channel for category management review."
  tags:
    - procurement
    - finance
    - sap-ariba
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement-reporting
      port: 8080
      tools:
        - name: digest-procurement-spend
          description: "Given a spend category and quarter, retrieve Ariba spend analytics and post a digest to the procurement leadership channel in Teams. Use for quarterly category management reviews and cost reduction initiatives."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "The spend category, e.g. Steel, Semiconductors, Logistics, or Indirect Procurement."
            - name: quarter
              in: body
              type: string
              description: "The fiscal quarter, e.g. Q1-2025."
          steps:
            - name: get-spend
              type: call
              call: "ariba-analytics.get-spend-summary"
              with:
                category: "{{category}}"
            - name: post-digest
              type: call
              call: "msteams-procurement.post-channel-message"
              with:
                channel_id: "$secrets.teams_procurement_channel_id"
                message: "Procurement Spend Digest | Category: {{category}} | Quarter: {{quarter}} | Data retrieved from Ariba. Full report in Power BI procurement dashboard."
  consumes:
    - type: http
      namespace: ariba-analytics
      baseUri: "https://openapi.ariba.com/api/analytics-reporting-details/v1"
      authentication:
        type: apikey
        key: "apikey"
        value: "$secrets.ariba_api_key"
        placement: header
      resources:
        - name: spend-summary
          path: "/reports/spend"
          inputParameters:
            - name: category
              in: query
          operations:
            - name: get-spend-summary
              method: GET
    - type: http
      namespace: msteams-procurement
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a new auto parts supplier submits a qualification request in SAP Ariba, creates a ServiceNow change request for vendor master setup in SAP S/4HANA and notifies the purchasing team via Teams.

naftiko: "0.5"
info:
  label: "SAP Ariba Supplier Qualification"
  description: "When a new auto parts supplier submits a qualification request in SAP Ariba, creates a ServiceNow change request for vendor master setup in SAP S/4HANA and notifies the purchasing team via Teams."
  tags:
    - procurement
    - supplier-management
    - sap-ariba
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: qualify-supplier
          description: "Given an Ariba supplier ID, retrieve supplier details, open a ServiceNow change request for SAP vendor master creation, and notify the purchasing team in Teams. Use when a new auto parts or materials supplier completes Ariba qualification."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The Ariba supplier ID for the newly qualified vendor."
          steps:
            - name: get-supplier
              type: call
              call: "ariba.get-supplier"
              with:
                supplier_id: "{{supplier_id}}"
            - name: create-change
              type: call
              call: "servicenow-proc.create-change"
              with:
                short_description: "Vendor master setup for qualified supplier: {{get-supplier.name}}"
                category: "vendor_master"
                description: "Supplier {{get-supplier.name}} ({{supplier_id}}) has completed Ariba qualification. Requires SAP S/4HANA vendor master creation and purchasing org assignment."
            - name: notify-purchasing
              type: call
              call: "msteams-proc.post-channel-message"
              with:
                channel_id: "$secrets.teams_purchasing_channel_id"
                message: "Supplier qualified: {{get-supplier.name}} | Ariba ID: {{supplier_id}} | Change request: {{create-change.number}} | Please complete SAP vendor master setup."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/supplier/v1"
      authentication:
        type: apikey
        key: "apikey"
        value: "$secrets.ariba_api_key"
        placement: header
      resources:
        - name: suppliers
          path: "/suppliers/{{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              method: GET
    - type: http
      namespace: servicenow-proc
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-proc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves an expense report summary from SAP Concur by report ID.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Lookup"
  description: "Retrieves an expense report summary from SAP Concur by report ID."
  tags:
    - finance
    - sap-concur
    - expense-management
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-expense-report
          description: "Given a Concur report ID, return the summary."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "SAP Concur expense report ID."
          call: concur.get-report
          with:
            id: "{{report_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://api.example.com/v1"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-report
              method: GET

Retrieves submitted expense reports from SAP Concur for a Honda cost center and identifies out-of-policy items for review by the travel and expense compliance team.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Expense Audit"
  description: "Retrieves submitted expense reports from SAP Concur for a Honda cost center and identifies out-of-policy items for review by the travel and expense compliance team."
  tags:
    - finance
    - travel
    - sap-concur
    - audit
    - expense-management
capability:
  exposes:
    - type: mcp
      namespace: travel-expense
      port: 8080
      tools:
        - name: audit-expense-reports
          description: "Given a SAP Concur cost center code, retrieve all submitted expense reports and flag out-of-policy items. Use for monthly T&E compliance audits and Honda travel policy enforcement."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "The Honda cost center code to retrieve expense reports for."
          call: "concur.list-reports-by-cost-center"
          with:
            cost_center: "{{cost_center}}"
          outputParameters:
            - name: reports
              type: array
              mapping: "$.Items"
              items:
                - name: report_id
                  type: string
                  mapping: "$.ID"
                - name: submitter
                  type: string
                  mapping: "$.OwnerName"
                - name: total
                  type: string
                  mapping: "$.Total"
                - name: currency
                  type: string
                  mapping: "$.CurrencyCode"
                - name: policy_compliant
                  type: string
                  mapping: "$.PolicyCompliant"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports"
          inputParameters:
            - name: cost_center
              in: query
          operations:
            - name: list-reports-by-cost-center
              method: GET

When an SAP Ariba contract approaches expiration, creates a Salesforce renewal opportunity.

naftiko: "0.5"
info:
  label: "SAP Contract Expiry to Renewal Workflow"
  description: "When an SAP Ariba contract approaches expiration, creates a Salesforce renewal opportunity."
  tags:
    - procurement
    - sap-ariba
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: sap-contract-expiry-to-renewal-workflow
          description: "When an SAP Ariba contract approaches expiration, creates a Salesforce renewal opportunity."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-ariba
              type: call
              call: ariba.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-salesforce
              type: call
              call: salesforce.create-record
              with:
                reference: "{{process-ariba.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_procurement_team_id"
                channel_id: "$secrets.teams_procurement_channel_id"
                text: "SAP Contract Expiry to Renewal Workflow: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/procurement/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: records
          path: "/requisitions"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a delivery is confirmed in SAP, updates the Salesforce order and notifies customer success.

naftiko: "0.5"
info:
  label: "SAP Delivery Confirmation to Salesforce Update"
  description: "When a delivery is confirmed in SAP, updates the Salesforce order and notifies customer success."
  tags:
    - logistics
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: sap-delivery-confirmation-to-salesforce-update
          description: "When a delivery is confirmed in SAP, updates the Salesforce order and notifies customer success."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-sap
              type: call
              call: sap.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-salesforce
              type: call
              call: salesforce.create-record
              with:
                reference: "{{process-sap.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_logistics_team_id"
                channel_id: "$secrets.teams_logistics_channel_id"
                text: "SAP Delivery Confirmation to Salesforce Update: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/A_BusinessPartner"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a goods receipt is posted in SAP, matches it against pending invoices and notifies accounts payable in Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Goods Receipt to Invoice Match"
  description: "When a goods receipt is posted in SAP, matches it against pending invoices and notifies accounts payable in Microsoft Teams."
  tags:
    - procurement
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: sap-goods-receipt-to-invoice-match
          description: "When a goods receipt is posted in SAP, matches it against pending invoices and notifies accounts payable in Microsoft Teams."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-sap
              type: call
              call: sap.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-msteams
              type: call
              call: msteams.create-record
              with:
                reference: "{{process-sap.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_procurement_team_id"
                channel_id: "$secrets.teams_procurement_channel_id"
                text: "SAP Goods Receipt to Invoice Match: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/A_BusinessPartner"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: records
          path: "/teams"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When SAP inventory falls below reorder point, creates an Ariba purchase requisition and notifies procurement.

naftiko: "0.5"
info:
  label: "SAP Inventory Alert to Procurement Request"
  description: "When SAP inventory falls below reorder point, creates an Ariba purchase requisition and notifies procurement."
  tags:
    - supply-chain
    - sap
    - sap-ariba
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: sap-inventory-alert-to-procurement-request
          description: "When SAP inventory falls below reorder point, creates an Ariba purchase requisition and notifies procurement."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-sap
              type: call
              call: sap.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-ariba
              type: call
              call: ariba.create-record
              with:
                reference: "{{process-sap.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_supply_chain_team_id"
                channel_id: "$secrets.teams_supply_chain_channel_id"
                text: "SAP Inventory Alert to Procurement Request: {{source_id}} | {{summary}} | Ref: {{create-ariba.id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/A_BusinessPartner"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/procurement/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: records
          path: "/requisitions"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Looks up a supplier invoice in SAP S/4HANA by document number and fiscal year, returning payment status, due date, and supplier name for accounts payable follow-up.

naftiko: "0.5"
info:
  label: "SAP Invoice Processing Status"
  description: "Looks up a supplier invoice in SAP S/4HANA by document number and fiscal year, returning payment status, due date, and supplier name for accounts payable follow-up."
  tags:
    - finance
    - accounts-payable
    - sap
    - erp
capability:
  exposes:
    - type: mcp
      namespace: finance-ap
      port: 8080
      tools:
        - name: get-invoice-status
          description: "Given a SAP invoice document number and fiscal year, retrieve payment status, due date, and supplier name from SAP S/4HANA. Use for accounts payable status checks and payment run planning."
          inputParameters:
            - name: invoice_number
              in: body
              type: string
              description: "The SAP accounts payable invoice document number."
            - name: fiscal_year
              in: body
              type: string
              description: "The fiscal year of the invoice in YYYY format."
          call: "sap-ap.get-invoice"
          with:
            invoice_number: "{{invoice_number}}"
            fiscal_year: "{{fiscal_year}}"
          outputParameters:
            - name: payment_status
              type: string
              mapping: "$.d.PaymentStatus"
            - name: due_date
              type: string
              mapping: "$.d.PaymentDueDate"
            - name: supplier_name
              type: string
              mapping: "$.d.SupplierName"
            - name: amount
              type: string
              mapping: "$.d.DocumentAmountInCompanyCodeCurrency"
  consumes:
    - type: http
      namespace: sap-ap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_SUPPLIER_INVOICE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: supplier-invoices
          path: "/A_SupplierInvoice(FiscalYear='{{fiscal_year}}',SupplierInvoiceIDByInvcgParty='{{invoice_number}}')"
          inputParameters:
            - name: invoice_number
              in: path
            - name: fiscal_year
              in: path
          operations:
            - name: get-invoice
              method: GET
              outputRawFormat: xml

Retrieves material master data from SAP by material number.

naftiko: "0.5"
info:
  label: "SAP Material Master Lookup"
  description: "Retrieves material master data from SAP by material number."
  tags:
    - erp
    - sap
    - materials
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-material-master
          description: "Given a SAP material number, retrieve the material description."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "SAP material number."
          call: sap.get-material
          with:
            Material: "{{material_number}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: products
          path: "/A_Product"
          inputParameters:
            - name: Material
              in: path
          operations:
            - name: get-material
              method: GET

When an SAP payment run completes, notifies vendor management and updates Salesforce records.

naftiko: "0.5"
info:
  label: "SAP Payment Run to Vendor Notification"
  description: "When an SAP payment run completes, notifies vendor management and updates Salesforce records."
  tags:
    - finance
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: sap-payment-run-to-vendor-notification
          description: "When an SAP payment run completes, notifies vendor management and updates Salesforce records."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-sap
              type: call
              call: sap.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-salesforce
              type: call
              call: salesforce.create-record
              with:
                reference: "{{process-sap.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_finance_team_id"
                channel_id: "$secrets.teams_finance_channel_id"
                text: "SAP Payment Run to Vendor Notification: {{source_id}} | {{summary}} | Ref: {{create-salesforce.id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/A_BusinessPartner"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: records
          path: "/sobjects"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves the status of financial period-close tasks in SAP S/4HANA for a given Honda company code and fiscal period, surfacing open items for the finance controller.

naftiko: "0.5"
info:
  label: "SAP Period Close Checklist"
  description: "Retrieves the status of financial period-close tasks in SAP S/4HANA for a given Honda company code and fiscal period, surfacing open items for the finance controller."
  tags:
    - finance
    - period-close
    - sap
    - erp
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: get-period-close-status
          description: "Given an SAP company code and fiscal period, retrieve the list of period-close tasks and their completion status. Use during month-end and quarter-end financial close for Honda's global entities."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The SAP company code, e.g. 1000 for Honda Motor Co. Japan."
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period in YYYYMM format, e.g. 202503."
          call: "sap-close.get-closing-tasks"
          with:
            company_code: "{{company_code}}"
            fiscal_period: "{{fiscal_period}}"
          outputParameters:
            - name: open_tasks
              type: array
              mapping: "$.d.results"
              items:
                - name: task_id
                  type: string
                  mapping: "$.TaskID"
                - name: description
                  type: string
                  mapping: "$.Description"
                - name: status
                  type: string
                  mapping: "$.Status"
                - name: responsible
                  type: string
                  mapping: "$.ResponsibleUser"
  consumes:
    - type: http
      namespace: sap-close
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/FAR_PERIOD_CLOSE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: closing-tasks
          path: "/ClosingTaskSet"
          inputParameters:
            - name: company_code
              in: query
            - name: fiscal_period
              in: query
          operations:
            - name: get-closing-tasks
              method: GET
              outputRawFormat: xml

When a purchase order is approved in SAP, syncs the PO to Ariba and posts confirmation to the procurement Teams channel.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Approval to Ariba Sync"
  description: "When a purchase order is approved in SAP, syncs the PO to Ariba and posts confirmation to the procurement Teams channel."
  tags:
    - procurement
    - sap
    - sap-ariba
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: sap-purchase-order-approval-to-ariba-sync
          description: "When a purchase order is approved in SAP, syncs the PO to Ariba and posts confirmation to the procurement Teams channel."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-sap
              type: call
              call: sap.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-ariba
              type: call
              call: ariba.create-record
              with:
                reference: "{{process-sap.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_procurement_team_id"
                channel_id: "$secrets.teams_procurement_channel_id"
                text: "SAP Purchase Order Approval to Ariba Sync: {{source_id}} | {{summary}} | Ref: {{create-ariba.id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/A_BusinessPartner"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/procurement/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: records
          path: "/requisitions"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Looks up a Honda SAP S/4HANA purchase order by number and returns header status, supplier name, total value, and currency for procurement and supply chain review.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Looks up a Honda SAP S/4HANA purchase order by number and returns header status, supplier name, total value, and currency for procurement and supply chain review."
  tags:
    - procurement
    - finance
    - sap
    - erp
    - supply-chain
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, retrieve its overall status, supplier name, total amount, and currency from SAP S/4HANA. Use for procurement status checks and supplier payment verification."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number, e.g. 4500067890."
          call: "sap-s4.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: supplier
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap-s4
      baseUri: "https://honda-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
              outputRawFormat: xml

When a quality inspection places goods on hold, creates a Jira quality issue and notifies procurement.

naftiko: "0.5"
info:
  label: "SAP Quality Hold to Supplier Notification"
  description: "When a quality inspection places goods on hold, creates a Jira quality issue and notifies procurement."
  tags:
    - quality
    - sap
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quality
      port: 8080
      tools:
        - name: sap-quality-hold-to-supplier-notification
          description: "When a quality inspection places goods on hold, creates a Jira quality issue and notifies procurement."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-sap
              type: call
              call: sap.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-sap.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_quality_team_id"
                channel_id: "$secrets.teams_quality_channel_id"
                text: "SAP Quality Hold to Supplier Notification: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: records
          path: "/A_BusinessPartner"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves vendor master data from SAP by vendor ID.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Lookup"
  description: "Retrieves vendor master data from SAP by vendor ID."
  tags:
    - erp
    - sap
    - vendor-management
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-vendor-master
          description: "Given a SAP vendor ID, retrieve the vendor name."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "SAP vendor master ID."
          call: sap.get-vendor
          with:
            Supplier: "{{vendor_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: suppliers
          path: "/A_Supplier"
          inputParameters:
            - name: Supplier
              in: path
          operations:
            - name: get-vendor
              method: GET

When a ServiceNow asset reaches end-of-life, creates an Ariba requisition and notifies IT asset management.

naftiko: "0.5"
info:
  label: "ServiceNow Asset Refresh to Procurement"
  description: "When a ServiceNow asset reaches end-of-life, creates an Ariba requisition and notifies IT asset management."
  tags:
    - asset-management
    - servicenow
    - sap-ariba
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: asset-management
      port: 8080
      tools:
        - name: servicenow-asset-refresh-to-procurement
          description: "When a ServiceNow asset reaches end-of-life, creates an Ariba requisition and notifies IT asset management."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-servicenow
              type: call
              call: servicenow.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-ariba
              type: call
              call: ariba.create-record
              with:
                reference: "{{process-servicenow.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_asset_management_team_id"
                channel_id: "$secrets.teams_asset_management_channel_id"
                text: "ServiceNow Asset Refresh to Procurement: {{source_id}} | {{summary}} | Ref: {{create-ariba.id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/procurement/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: records
          path: "/requisitions"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves a ServiceNow change request for a Honda IT or manufacturing system, returning its approval status, risk level, and implementation schedule for CAB review.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Approval"
  description: "Retrieves a ServiceNow change request for a Honda IT or manufacturing system, returning its approval status, risk level, and implementation schedule for CAB review."
  tags:
    - itsm
    - change-management
    - servicenow
    - governance
capability:
  exposes:
    - type: mcp
      namespace: itsm-change
      port: 8080
      tools:
        - name: get-change-request
          description: "Given a ServiceNow change request number, retrieve its state, risk, approval status, and implementation window. Use for change advisory board review and change governance processes."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number, e.g. CHG0056789."
          call: "servicenow-change.get-change"
          with:
            change_number: "{{change_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: risk
              type: string
              mapping: "$.result.risk"
            - name: approval
              type: string
              mapping: "$.result.approval"
            - name: start_date
              type: string
              mapping: "$.result.start_date"
  consumes:
    - type: http
      namespace: servicenow-change
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          inputParameters:
            - name: change_number
              in: query
          operations:
            - name: get-change
              method: GET

When a ServiceNow change is approved, triggers a GitHub deployment and updates the change with status.

naftiko: "0.5"
info:
  label: "ServiceNow Change to GitHub Deployment"
  description: "When a ServiceNow change is approved, triggers a GitHub deployment and updates the change with status."
  tags:
    - itsm
    - servicenow
    - github
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: servicenow-change-to-github-deployment
          description: "When a ServiceNow change is approved, triggers a GitHub deployment and updates the change with status."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-servicenow
              type: call
              call: servicenow.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-github
              type: call
              call: github.create-record
              with:
                reference: "{{process-servicenow.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_itsm_team_id"
                channel_id: "$secrets.teams_itsm_channel_id"
                text: "ServiceNow Change to GitHub Deployment: {{source_id}} | {{summary}} | Ref: {{create-github.id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: records
          path: "/repos"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Escalates a ServiceNow incident to P1, reassigns it to Honda's IT escalation group, and notifies the CTO via Teams when a critical system (ERP, connected-vehicle platform, or manufacturing) is impacted.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Escalation"
  description: "Escalates a ServiceNow incident to P1, reassigns it to Honda's IT escalation group, and notifies the CTO via Teams when a critical system (ERP, connected-vehicle platform, or manufacturing) is impacted."
  tags:
    - itsm
    - incident-response
    - servicenow
    - microsoft-teams
    - escalation
    - sla
capability:
  exposes:
    - type: mcp
      namespace: itsm-escalation
      port: 8080
      tools:
        - name: escalate-incident
          description: "Given a ServiceNow incident number and escalation reason, update priority to P1, reassign to the IT escalation group, and notify the CTO channel in Teams. Use for critical Honda system failures affecting manufacturing, EV platforms, or enterprise operations."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number, e.g. INC0078901."
            - name: escalation_reason
              in: body
              type: string
              description: "Business impact and reason for escalation."
          steps:
            - name: update-incident
              type: call
              call: "servicenow-esc.patch-incident"
              with:
                incident_number: "{{incident_number}}"
                priority: "1"
                assignment_group: "IT_Escalation"
                work_notes: "Escalated to P1: {{escalation_reason}}"
            - name: notify-cto
              type: call
              call: "msteams-esc.post-channel-message"
              with:
                channel_id: "$secrets.teams_cto_channel_id"
                message: "CRITICAL ESCALATION P1 | Incident: {{incident_number}} | Impact: {{escalation_reason}} | IT Escalation team engaged. Manufacturing or platform impact possible."
  consumes:
    - type: http
      namespace: servicenow-esc
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: patch-incident
              method: PATCH
    - type: http
      namespace: msteams-esc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves the priority and assignment group for a ServiceNow incident by number.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Priority Lookup"
  description: "Retrieves the priority and assignment group for a ServiceNow incident by number."
  tags:
    - itsm
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident-priority
          description: "Given a ServiceNow incident number, return the priority and assigned group."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number."
          call: servicenow.get-incident
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET

When a ServiceNow P1 incident is created, schedules a Teams bridge and pages the incident commander via PagerDuty.

naftiko: "0.5"
info:
  label: "ServiceNow Major Incident Bridge Setup"
  description: "When a ServiceNow P1 incident is created, schedules a Teams bridge and pages the incident commander via PagerDuty."
  tags:
    - itsm
    - servicenow
    - microsoft-teams
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: servicenow-major-incident-bridge-setup
          description: "When a ServiceNow P1 incident is created, schedules a Teams bridge and pages the incident commander via PagerDuty."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-servicenow
              type: call
              call: servicenow.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-msteams
              type: call
              call: msteams.create-record
              with:
                reference: "{{process-servicenow.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_itsm_team_id"
                channel_id: "$secrets.teams_itsm_channel_id"
                text: "ServiceNow Major Incident Bridge Setup: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: records
          path: "/teams"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a ServiceNow problem is resolved, creates a Confluence KB article and updates the KEDB.

naftiko: "0.5"
info:
  label: "ServiceNow Problem to Known Error KB"
  description: "When a ServiceNow problem is resolved, creates a Confluence KB article and updates the KEDB."
  tags:
    - itsm
    - servicenow
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: servicenow-problem-to-known-error-kb
          description: "When a ServiceNow problem is resolved, creates a Confluence KB article and updates the KEDB."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-servicenow
              type: call
              call: servicenow.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-confluence
              type: call
              call: confluence.create-record
              with:
                reference: "{{process-servicenow.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_itsm_team_id"
                channel_id: "$secrets.teams_itsm_channel_id"
                text: "ServiceNow Problem to Known Error KB: {{source_id}} | {{summary}} | Ref: {{create-confluence.id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://honda.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: records
          path: "/content"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When Snowflake credit consumption spikes, creates a Jira investigation ticket and alerts the FinOps team.

naftiko: "0.5"
info:
  label: "Snowflake Cost Spike to FinOps Alert"
  description: "When Snowflake credit consumption spikes, creates a Jira investigation ticket and alerts the FinOps team."
  tags:
    - finops
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finops
      port: 8080
      tools:
        - name: snowflake-cost-spike-to-finops-alert
          description: "When Snowflake credit consumption spikes, creates a Jira investigation ticket and alerts the FinOps team."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-snowflake
              type: call
              call: snowflake.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-snowflake.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_finops_team_id"
                channel_id: "$secrets.teams_finops_channel_id"
                text: "Snowflake Cost Spike to FinOps Alert: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://honda.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: records
          path: "/statements"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Snowflake ETL pipeline fails, creates a Jira bug and triggers a PagerDuty incident for data engineering.

naftiko: "0.5"
info:
  label: "Snowflake ETL Failure to PagerDuty Escalation"
  description: "When a Snowflake ETL pipeline fails, creates a Jira bug and triggers a PagerDuty incident for data engineering."
  tags:
    - data-engineering
    - snowflake
    - jira
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: data-engineering
      port: 8080
      tools:
        - name: snowflake-etl-failure-to-pagerduty-escalation
          description: "When a Snowflake ETL pipeline fails, creates a Jira bug and triggers a PagerDuty incident for data engineering."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-snowflake
              type: call
              call: snowflake.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-snowflake.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_data_engineering_team_id"
                channel_id: "$secrets.teams_data_engineering_channel_id"
                text: "Snowflake ETL Failure to PagerDuty Escalation: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://honda.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: records
          path: "/statements"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Snowflake schema change is detected, creates a Jira governance review and notifies data stewards.

naftiko: "0.5"
info:
  label: "Snowflake Schema Drift to Data Governance"
  description: "When a Snowflake schema change is detected, creates a Jira governance review and notifies data stewards."
  tags:
    - data-governance
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data-governance
      port: 8080
      tools:
        - name: snowflake-schema-drift-to-data-governance
          description: "When a Snowflake schema change is detected, creates a Jira governance review and notifies data stewards."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-snowflake
              type: call
              call: snowflake.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-jira
              type: call
              call: jira.create-record
              with:
                reference: "{{process-snowflake.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_data_governance_team_id"
                channel_id: "$secrets.teams_data_governance_channel_id"
                text: "Snowflake Schema Drift to Data Governance: {{source_id}} | {{summary}} | Ref: {{create-jira.id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://honda.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: records
          path: "/statements"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: records
          path: "/issue"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Executes a count query against a Snowflake table and returns the row count.

naftiko: "0.5"
info:
  label: "Snowflake Table Row Count"
  description: "Executes a count query against a Snowflake table and returns the row count."
  tags:
    - data
    - snowflake
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: data
      port: 8080
      tools:
        - name: get-table-row-count
          description: "Given a Snowflake table name, return the total row count."
          inputParameters:
            - name: table_name
              in: body
              type: string
              description: "Fully qualified Snowflake table name."
          call: snowflake.execute-query
          with:
            statement: "{{table_name}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://honda.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          inputParameters:
            - name: statement
              in: query
          operations:
            - name: execute-query
              method: GET

Retrieves the latest auto parts demand forecast from Salesforce for a component SKU and pushes the planned independent requirement into SAP S/4HANA for production planning.

naftiko: "0.5"
info:
  label: "Supply Chain Parts Demand Forecast Sync"
  description: "Retrieves the latest auto parts demand forecast from Salesforce for a component SKU and pushes the planned independent requirement into SAP S/4HANA for production planning."
  tags:
    - supply-chain
    - salesforce
    - sap
    - erp
    - demand-planning
    - manufacturing
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-planning
      port: 8080
      tools:
        - name: sync-parts-demand-forecast
          description: "Given a parts SKU and planning period, retrieve the demand forecast from Salesforce and create a planned independent requirement in SAP S/4HANA. Use for monthly production planning and parts procurement alignment."
          inputParameters:
            - name: part_number
              in: body
              type: string
              description: "The Honda parts number or component SKU, e.g. 45251-T20-A01."
            - name: planning_period
              in: body
              type: string
              description: "The planning period in YYYYMM format, e.g. 202504."
            - name: forecast_quantity
              in: body
              type: string
              description: "Forecasted demand quantity in units."
          steps:
            - name: get-forecast
              type: call
              call: "salesforce-forecast.get-parts-forecast"
              with:
                part_number: "{{part_number}}"
            - name: push-to-sap
              type: call
              call: "sap-pir.create-planned-requirement"
              with:
                material: "{{part_number}}"
                planning_period: "{{planning_period}}"
                quantity: "{{forecast_quantity}}"
  consumes:
    - type: http
      namespace: salesforce-forecast
      baseUri: "https://honda.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: parts-forecast
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: get-parts-forecast
              method: GET
    - type: http
      namespace: sap-pir
      baseUri: "https://honda-s4.sap.com/sap/opu/odata/sap/API_PLND_INDEP_REQMT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: planned-requirements
          path: "/A_PlannedIndepRqmt"
          operations:
            - name: create-planned-requirement
              method: POST

When Terraform Cloud detects infrastructure drift, creates a Jira remediation ticket and notifies the platform engineering team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Terraform Cloud Drift Detection"
  description: "When Terraform Cloud detects infrastructure drift, creates a Jira remediation ticket and notifies the platform engineering team in Microsoft Teams."
  tags:
    - infrastructure
    - terraform
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: handle-drift-detection
          description: "Given a Terraform workspace with drift, create a remediation ticket and notify the platform team."
          inputParameters:
            - name: workspace_name
              in: body
              type: string
              description: "Terraform Cloud workspace name."
            - name: drift_summary
              in: body
              type: string
              description: "Summary of detected drift."
            - name: resource_count
              in: body
              type: integer
              description: "Number of drifted resources."
          steps:
            - name: create-ticket
              type: call
              call: jira.create-issue
              with:
                project_key: PLATFORM
                issuetype: Bug
                summary: "Terraform Drift: {{workspace_name}} ({{resource_count}} resources)"
                description: "{{drift_summary}}"
            - name: notify-platform
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_platform_team_id"
                channel_id: "$secrets.teams_platform_channel_id"
                text: "Terraform Drift: {{workspace_name}} | {{resource_count}} resources | Jira: {{create-ticket.key}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://honda.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Initiates the annual performance review cycle for a Honda division in Workday by notifying all managers via Teams to complete reviews for their direct reports by the submission deadline.

naftiko: "0.5"
info:
  label: "Workday Annual Performance Review Kickoff"
  description: "Initiates the annual performance review cycle for a Honda division in Workday by notifying all managers via Teams to complete reviews for their direct reports by the submission deadline."
  tags:
    - hr
    - performance-management
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-performance
      port: 8080
      tools:
        - name: kickoff-performance-reviews
          description: "Given a Workday department ID, review cycle name, and deadline, list active associates and notify managers via Teams to begin the annual review process in Workday."
          inputParameters:
            - name: department_id
              in: body
              type: string
              description: "The Workday department ID to kick off reviews for."
            - name: review_cycle
              in: body
              type: string
              description: "The review cycle name, e.g. 2025 Annual Performance Review."
            - name: deadline
              in: body
              type: string
              description: "Submission deadline in YYYY-MM-DD format."
          steps:
            - name: get-employees
              type: call
              call: "workday-perf.list-workers"
              with:
                department_id: "{{department_id}}"
            - name: notify-hr-channel
              type: call
              call: "msteams-perf.post-channel-message"
              with:
                channel_id: "$secrets.teams_hr_channel_id"
                message: "Performance Review Kickoff | {{review_cycle}} | Department: {{department_id}} | Deadline: {{deadline}} | Please complete all reviews in Workday."
  consumes:
    - type: http
      namespace: workday-perf
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/honda/workers"
          inputParameters:
            - name: department_id
              in: query
          operations:
            - name: list-workers
              method: GET
    - type: http
      namespace: msteams-perf
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a compensation change is finalized in Workday, syncs to payroll and confirms with HRBP.

naftiko: "0.5"
info:
  label: "Workday Compensation Change to Payroll Sync"
  description: "When a compensation change is finalized in Workday, syncs to payroll and confirms with HRBP."
  tags:
    - hr
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: workday-compensation-change-to-payroll-sync
          description: "When a compensation change is finalized in Workday, syncs to payroll and confirms with HRBP."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-workday
              type: call
              call: workday.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-msteams
              type: call
              call: msteams.create-record
              with:
                reference: "{{process-workday.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_hr_team_id"
                channel_id: "$secrets.teams_hr_channel_id"
                text: "Workday Compensation Change to Payroll Sync: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://honda.workday.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: records
          path: "/workers"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: records
          path: "/teams"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves an employee profile from Workday by employee ID.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves an employee profile from Workday by employee ID."
  tags:
    - hr
    - workday
    - employee-data
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Given a Workday employee ID, return the employee name and title."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday employee ID."
          call: workday.get-worker
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://honda.workday.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

When headcount changes are approved, updates the Snowflake model and refreshes the Power BI dashboard.

naftiko: "0.5"
info:
  label: "Workday Headcount Change to Finance Forecast"
  description: "When headcount changes are approved, updates the Snowflake model and refreshes the Power BI dashboard."
  tags:
    - finance
    - workday
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: workday-headcount-change-to-finance-forecast
          description: "When headcount changes are approved, updates the Snowflake model and refreshes the Power BI dashboard."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-workday
              type: call
              call: workday.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-snowflake
              type: call
              call: snowflake.create-record
              with:
                reference: "{{process-workday.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_finance_team_id"
                channel_id: "$secrets.teams_finance_channel_id"
                text: "Workday Headcount Change to Finance Forecast: {{source_id}} | {{summary}} | Ref: {{create-snowflake.id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://honda.workday.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: records
          path: "/workers"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://honda.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: records
          path: "/statements"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Workday leave request is approved, notifies the manager and blocks the calendar.

naftiko: "0.5"
info:
  label: "Workday Leave Request to Calendar Block"
  description: "When a Workday leave request is approved, notifies the manager and blocks the calendar."
  tags:
    - hr
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: workday-leave-request-to-calendar-block
          description: "When a Workday leave request is approved, notifies the manager and blocks the calendar."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-workday
              type: call
              call: workday.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-msteams
              type: call
              call: msteams.create-record
              with:
                reference: "{{process-workday.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_hr_team_id"
                channel_id: "$secrets.teams_hr_channel_id"
                text: "Workday Leave Request to Calendar Block: {{source_id}} | {{summary}} | Ref: {{create-msteams.id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://honda.workday.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: records
          path: "/workers"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: records
          path: "/teams"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a new hire is confirmed in Workday, creates a ServiceNow equipment request for laptop provisioning.

naftiko: "0.5"
info:
  label: "Workday New Hire to Equipment Request"
  description: "When a new hire is confirmed in Workday, creates a ServiceNow equipment request for laptop provisioning."
  tags:
    - hr
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: workday-new-hire-to-equipment-request
          description: "When a new hire is confirmed in Workday, creates a ServiceNow equipment request for laptop provisioning."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-workday
              type: call
              call: workday.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-servicenow
              type: call
              call: servicenow.create-record
              with:
                reference: "{{process-workday.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_hr_team_id"
                channel_id: "$secrets.teams_hr_channel_id"
                text: "Workday New Hire to Equipment Request: {{source_id}} | {{summary}} | Ref: {{create-servicenow.id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://honda.workday.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: records
          path: "/workers"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://honda.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: records
          path: "/table/incident"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a Workday org restructure is processed, triggers an Okta access review and creates a compliance ticket.

naftiko: "0.5"
info:
  label: "Workday Org Change to Access Review"
  description: "When a Workday org restructure is processed, triggers an Okta access review and creates a compliance ticket."
  tags:
    - compliance
    - workday
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: workday-org-change-to-access-review
          description: "When a Workday org restructure is processed, triggers an Okta access review and creates a compliance ticket."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-workday
              type: call
              call: workday.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-okta
              type: call
              call: okta.create-record
              with:
                reference: "{{process-workday.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_compliance_team_id"
                channel_id: "$secrets.teams_compliance_channel_id"
                text: "Workday Org Change to Access Review: {{source_id}} | {{summary}} | Ref: {{create-okta.id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://honda.workday.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: records
          path: "/workers"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://honda.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: records
          path: "/users"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

When a promotion is processed in Workday, updates Okta groups and creates a ServiceNow access request.

naftiko: "0.5"
info:
  label: "Workday Promotion to Access Upgrade"
  description: "When a promotion is processed in Workday, updates Okta groups and creates a ServiceNow access request."
  tags:
    - hr
    - workday
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: workday-promotion-to-access-upgrade
          description: "When a promotion is processed in Workday, updates Okta groups and creates a ServiceNow access request."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-workday
              type: call
              call: workday.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-okta
              type: call
              call: okta.create-record
              with:
                reference: "{{process-workday.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_hr_team_id"
                channel_id: "$secrets.teams_hr_channel_id"
                text: "Workday Promotion to Access Upgrade: {{source_id}} | {{summary}} | Ref: {{create-okta.id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://honda.workday.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: records
          path: "/workers"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://honda.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: records
          path: "/users"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves open engineering and manufacturing job requisitions and candidate pipeline counts from Workday Recruiting for a given Honda division or department.

naftiko: "0.5"
info:
  label: "Workday Recruiting Pipeline Status"
  description: "Retrieves open engineering and manufacturing job requisitions and candidate pipeline counts from Workday Recruiting for a given Honda division or department."
  tags:
    - hr
    - recruiting
    - workday
    - talent-acquisition
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: hr-recruiting
      port: 8080
      tools:
        - name: get-recruiting-pipeline
          description: "Given a Workday department ID, retrieve all open job requisitions and their candidate pipeline counts. Use for weekly talent acquisition reviews and hiring manager status updates across Honda divisions."
          inputParameters:
            - name: department_id
              in: body
              type: string
              description: "The Workday department ID to retrieve open requisitions for."
          call: "workday-rec.list-requisitions"
          with:
            department_id: "{{department_id}}"
          outputParameters:
            - name: requisitions
              type: array
              mapping: "$.data"
              items:
                - name: req_id
                  type: string
                  mapping: "$.id"
                - name: job_title
                  type: string
                  mapping: "$.jobTitle"
                - name: status
                  type: string
                  mapping: "$.status"
                - name: candidate_count
                  type: string
                  mapping: "$.candidateCount"
  consumes:
    - type: http
      namespace: workday-rec
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/recruiting/v3"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/jobRequisitions"
          inputParameters:
            - name: department_id
              in: query
          operations:
            - name: list-requisitions
              method: GET

When a Honda associate changes roles in Workday (e.g., engineer to lead engineer or cross-division transfer), creates a ServiceNow access update request and notifies the new manager via Teams.

naftiko: "0.5"
info:
  label: "Workday Role Change Provisioning"
  description: "When a Honda associate changes roles in Workday (e.g., engineer to lead engineer or cross-division transfer), creates a ServiceNow access update request and notifies the new manager via Teams."
  tags:
    - hr
    - access-management
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-role-change
      port: 8080
      tools:
        - name: provision-role-change
          description: "Given a Workday employee ID, new role, effective date, and new manager UPN, create a ServiceNow access-update request and notify the new manager in Teams. Use for promotions and cross-division transfers."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the associate changing roles."
            - name: new_role
              in: body
              type: string
              description: "The new job title, e.g. Senior Software Engineer or Vehicle Program Manager."
            - name: effective_date
              in: body
              type: string
              description: "The effective date of the role change in YYYY-MM-DD format."
            - name: new_manager_upn
              in: body
              type: string
              description: "The Microsoft 365 UPN of the new manager."
          steps:
            - name: get-worker
              type: call
              call: "workday-rc.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: create-access-request
              type: call
              call: "servicenow-rc.create-incident"
              with:
                short_description: "Access update for {{get-worker.display_name}} — new role: {{new_role}}"
                category: "access_management"
            - name: notify-manager
              type: call
              call: "msteams-rc.send-message"
              with:
                recipient_upn: "{{new_manager_upn}}"
                message: "{{get-worker.display_name}} will join your team as {{new_role}} on {{effective_date}}. Access update request: {{create-access-request.number}}."
  consumes:
    - type: http
      namespace: workday-rc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/honda/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow-rc
      baseUri: "https://honda.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-rc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a termination is processed in Workday, deactivates the user in Okta and creates a ServiceNow access revocation ticket.

naftiko: "0.5"
info:
  label: "Workday Termination to Okta Deprovisioning"
  description: "When a termination is processed in Workday, deactivates the user in Okta and creates a ServiceNow access revocation ticket."
  tags:
    - hr
    - workday
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: workday-termination-to-okta-deprovisioning
          description: "When a termination is processed in Workday, deactivates the user in Okta and creates a ServiceNow access revocation ticket."
          inputParameters:
            - name: source_id
              in: body
              type: string
              description: "Source record identifier."
            - name: summary
              in: body
              type: string
              description: "Summary of the event."
            - name: severity
              in: body
              type: string
              description: "Priority or severity level."
          steps:
            - name: process-workday
              type: call
              call: workday.process-record
              with:
                id: "{{source_id}}"
                description: "{{summary}}"
            - name: create-okta
              type: call
              call: okta.create-record
              with:
                reference: "{{process-workday.id}}"
                summary: "{{summary}}"
                priority: "{{severity}}"
            - name: notify-team
              type: call
              call: msteams.send-channel-message
              with:
                team_id: "$secrets.teams_hr_team_id"
                channel_id: "$secrets.teams_hr_channel_id"
                text: "Workday Termination to Okta Deprovisioning: {{source_id}} | {{summary}} | Ref: {{create-okta.id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://honda.workday.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: records
          path: "/workers"
          operations:
            - name: process-record
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://honda.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: records
          path: "/users"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Enriches a company record with firmographic data from ZoomInfo.

naftiko: "0.5"
info:
  label: "ZoomInfo Company Enrichment Lookup"
  description: "Enriches a company record with firmographic data from ZoomInfo."
  tags:
    - sales
    - zoominfo
    - data-enrichment
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: enrich-company
          description: "Given a domain, return the ZoomInfo company profile."
          inputParameters:
            - name: domain
              in: body
              type: string
              description: "Company website domain."
          call: zoominfo.enrich-company
          with:
            companyWebsite: "{{domain}}"
          outputParameters:
            - name: result_id
              type: string
              mapping: "$.id"
            - name: result_status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.example.com/v1"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: enrich
          path: "/enrich/company"
          inputParameters:
            - name: companyWebsite
              in: query
          operations:
            - name: enrich-company
              method: GET