PwC Capabilities
Naftiko 0.5 capability definitions for PwC - 100 capabilities showing integration workflows and service orchestrations.
Given an audit working paper or client document in SharePoint, uses Anthropic Claude to extract key findings, risks, and control observations, posting a summary to the audit team's Teams channel.
naftiko: "0.5"
info:
label: "AI-Assisted Audit Document Review"
description: "Given an audit working paper or client document in SharePoint, uses Anthropic Claude to extract key findings, risks, and control observations, posting a summary to the audit team's Teams channel."
tags:
- ai
- audit
- anthropic
- sharepoint
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: audit-ai
port: 8080
tools:
- name: review-audit-document
description: "Given a SharePoint document ID and audit engagement code, retrieve the document and use Anthropic Claude to extract key findings, control deficiencies, and risk observations for the audit team."
inputParameters:
- name: document_id
in: body
type: string
description: "The SharePoint document item ID for the audit working paper."
- name: site_id
in: body
type: string
description: "The SharePoint site ID containing the audit document."
- name: engagement_code
in: body
type: string
description: "The PwC engagement code for the audit (e.g., 'ENG-2026-00123')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the audit team review."
steps:
- name: get-document
type: call
call: sharepoint.get-file-content
with:
site_id: "{{site_id}}"
document_id: "{{document_id}}"
- name: generate-review
type: call
call: anthropic.create-message
with:
model: "claude-3-5-sonnet-20241022"
prompt: "You are a PwC audit manager reviewing working papers for engagement {{engagement_code}}. Extract: 1) Key findings, 2) Control deficiencies identified, 3) Risks noted, 4) Recommended action items. Document: {{get-document.content}}"
- name: post-review
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Audit Document Review — {{get-document.name}} ({{engagement_code}}):\n{{generate-review.content}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.sharepoint_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/items/{{document_id}}/content"
inputParameters:
- name: site_id
in: path
- name: document_id
in: path
operations:
- name: get-file-content
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Uses Anthropic Claude to review contract terms, identifies risk clauses, and posts summary to the legal team.
naftiko: "0.5"
info:
label: "AI-Assisted Contract Review"
description: "Uses Anthropic Claude to review contract terms, identifies risk clauses, and posts summary to the legal team."
tags:
- legal
- anthropic
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: ai_assisted_contract_review
description: "Uses Anthropic Claude to review contract terms, identifies risk clauses, and posts summary to the legal team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "AI-Assisted Contract Review: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "AI-Assisted Contract Review for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Given an engagement proposal document in SharePoint, uses Anthropic Claude to identify delivery risks, independence conflicts, and compliance considerations, then posts the assessment to the risk management Teams channel.
naftiko: "0.5"
info:
label: "AI-Assisted Engagement Risk Assessment"
description: "Given an engagement proposal document in SharePoint, uses Anthropic Claude to identify delivery risks, independence conflicts, and compliance considerations, then posts the assessment to the risk management Teams channel."
tags:
- ai
- risk-management
- anthropic
- sharepoint
- microsoft-teams
- compliance
capability:
exposes:
- type: mcp
namespace: risk-ai
port: 8080
tools:
- name: assess-engagement-risk
description: "Given a SharePoint proposal document and client name, use Anthropic Claude to identify delivery risks, independence conflicts, and regulatory compliance considerations."
inputParameters:
- name: document_id
in: body
type: string
description: "The SharePoint document ID for the engagement proposal."
- name: site_id
in: body
type: string
description: "The SharePoint site ID containing the proposal."
- name: client_name
in: body
type: string
description: "The prospective client's name for independence analysis."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the risk management team."
steps:
- name: get-proposal
type: call
call: sharepoint.get-file-content
with:
site_id: "{{site_id}}"
document_id: "{{document_id}}"
- name: assess-risks
type: call
call: anthropic.create-message
with:
model: "claude-3-5-sonnet-20241022"
prompt: "You are a PwC engagement risk manager. Review this proposal for client {{client_name}} and identify: 1) Delivery risks (complexity, resourcing, timeline), 2) Potential independence or conflict-of-interest issues, 3) Regulatory or ethical compliance considerations, 4) Risk mitigation recommendations. Proposal: {{get-proposal.content}}"
- name: post-assessment
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Engagement Risk Assessment — {{client_name}} ({{get-proposal.name}}):\n{{assess-risks.content}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.sharepoint_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/items/{{document_id}}/content"
inputParameters:
- name: site_id
in: path
- name: document_id
in: path
operations:
- name: get-file-content
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Uses Anthropic Claude to review financial statement data from Snowflake and posts findings to the audit team.
naftiko: "0.5"
info:
label: "AI-Assisted Financial Statement Review"
description: "Uses Anthropic Claude to review financial statement data from Snowflake and posts findings to the audit team."
tags:
- audit
- anthropic
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: ai_assisted_financial_statement_review
description: "Uses Anthropic Claude to review financial statement data from Snowflake and posts findings to the audit team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "AI-Assisted Financial Statement Review: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "AI-Assisted Financial Statement Review for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Uses Anthropic Claude to generate research memos from Snowflake data, uploads to SharePoint, and notifies the team.
naftiko: "0.5"
info:
label: "AI-Assisted Research Memo Generation"
description: "Uses Anthropic Claude to generate research memos from Snowflake data, uploads to SharePoint, and notifies the team."
tags:
- research
- anthropic
- snowflake
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: ai_assisted_research_memo_generation
description: "Uses Anthropic Claude to generate research memos from Snowflake data, uploads to SharePoint, and notifies the team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "AI-Assisted Research Memo Generation: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "AI-Assisted Research Memo Generation for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Uses Anthropic Claude to analyze engagement risk factors from Snowflake and generates risk scores for the quality team.
naftiko: "0.5"
info:
label: "AI-Assisted Risk Assessment Scoring"
description: "Uses Anthropic Claude to analyze engagement risk factors from Snowflake and generates risk scores for the quality team."
tags:
- risk
- anthropic
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: ai_assisted_risk_assessment_scoring
description: "Uses Anthropic Claude to analyze engagement risk factors from Snowflake and generates risk scores for the quality team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "AI-Assisted Risk Assessment Scoring: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "AI-Assisted Risk Assessment Scoring for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Given a tax research query and jurisdiction, uses Anthropic Claude to generate a structured tax position summary, posting the result to the tax team's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "AI-Assisted Tax Research Summary"
description: "Given a tax research query and jurisdiction, uses Anthropic Claude to generate a structured tax position summary, posting the result to the tax team's Microsoft Teams channel."
tags:
- ai
- tax
- anthropic
- microsoft-teams
- research
capability:
exposes:
- type: mcp
namespace: tax-ai
port: 8080
tools:
- name: summarize-tax-research
description: "Given a tax research question and jurisdiction, invoke Anthropic Claude to generate a structured tax position analysis with relevant authority citations and risk assessment."
inputParameters:
- name: research_query
in: body
type: string
description: "The tax research question to analyze (e.g., 'Transfer pricing treatment for intercompany IP licensing')."
- name: jurisdiction
in: body
type: string
description: "The tax jurisdiction for the analysis (e.g., 'United States', 'United Kingdom', 'Germany')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the tax team research digest."
steps:
- name: generate-analysis
type: call
call: anthropic.create-message
with:
model: "claude-3-5-sonnet-20241022"
prompt: "You are a senior PwC tax advisor. Analyze the following tax research question for {{jurisdiction}}: {{research_query}}. Provide: 1) Tax position analysis, 2) Relevant statutory or regulatory authority, 3) Key risks and uncertainties, 4) Recommended next steps. Note: This is preliminary research only."
- name: post-analysis
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Tax Research Analysis — {{jurisdiction}}:\nQuery: {{research_query}}\n\n{{generate-analysis.content}}\n\nNote: AI-assisted research — human review required before client delivery."
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
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Lists objects in an S3 bucket with a given prefix for data governance reviews.
naftiko: "0.5"
info:
label: "Amazon S3 Bucket Inventory"
description: "Lists objects in an S3 bucket with a given prefix for data governance reviews."
tags:
- cloud
- storage
- amazon-s3
capability:
exposes:
- type: mcp
namespace: cloud-storage
port: 8080
tools:
- name: list-bucket-objects
description: "Given an S3 bucket and prefix, return the list of objects."
inputParameters:
- name: bucket_name
in: body
type: string
description: "S3 bucket name."
- name: prefix
in: body
type: string
description: "Object key prefix."
call: s3.list-objects
with:
bucket: "{{bucket_name}}"
prefix: "{{prefix}}"
outputParameters:
- name: objects
type: array
mapping: "$.Contents"
- name: count
type: integer
mapping: "$.KeyCount"
consumes:
- type: http
namespace: s3
baseUri: "https://{{bucket}}.s3.amazonaws.com"
authentication:
type: aws-sigv4
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: objects
path: "/?list-type=2&prefix={{prefix}}"
inputParameters:
- name: bucket
in: host
- name: prefix
in: query
operations:
- name: list-objects
method: GET
When Datadog detects API gateway degradation, creates ServiceNow incident and notifies the platform team.
naftiko: "0.5"
info:
label: "API Gateway Performance Alert"
description: "When Datadog detects API gateway degradation, creates ServiceNow incident and notifies the platform team."
tags:
- devops
- api
- datadog
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: api_gateway_performance_alert
description: "When Datadog detects API gateway degradation, creates ServiceNow incident and notifies the platform team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "API Gateway Performance Alert: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "API Gateway Performance Alert for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When an audit finding is logged, creates a Jira remediation ticket, assigns to the responsible owner from Workday, creates a ServiceNow change request, and notifies audit leadership via Teams.
naftiko: "0.5"
info:
label: "Audit Finding Remediation Workflow"
description: "When an audit finding is logged, creates a Jira remediation ticket, assigns to the responsible owner from Workday, creates a ServiceNow change request, and notifies audit leadership via Teams."
tags:
- audit
- compliance
- jira
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: audit-remediation
port: 8080
tools:
- name: process-audit-finding
description: "Given audit finding details, create remediation tracking across systems and notify leadership."
inputParameters:
- name: finding_id
in: body
type: string
description: "Audit finding identifier."
- name: severity
in: body
type: string
description: "Finding severity (Critical, High, Medium, Low)."
- name: responsible_employee_id
in: body
type: string
description: "Workday ID of responsible person."
- name: description
in: body
type: string
description: "Finding description."
steps:
- name: get-owner
type: call
call: workday.get-worker
with:
worker_id: "{{responsible_employee_id}}"
- name: create-remediation-ticket
type: call
call: jira.create-issue
with:
project: AUDIT
issuetype: Task
summary: "Remediate finding {{finding_id}} [{{severity}}]"
description: "{{description}}"
assignee: "{{get-owner.work_email}}"
- name: create-change-request
type: call
call: servicenow.create-change
with:
short_description: "Audit remediation: {{finding_id}}"
category: audit
assigned_to: "{{get-owner.work_email}}"
- name: notify-leadership
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.audit_team_id"
channel_id: "$secrets.audit_findings_channel_id"
text: "Audit finding {{finding_id}} [{{severity}}] assigned to {{get-owner.full_name}}. Jira: {{create-remediation-ticket.key}}, Change: {{create-change-request.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
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 Cost Management detects a spend anomaly on a PwC subscription, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel.
naftiko: "0.5"
info:
label: "Azure Cloud Cost Anomaly Responder"
description: "When Azure Cost Management detects a spend anomaly on a PwC subscription, creates a ServiceNow financial incident and posts a FinOps alert to the Microsoft Teams cost management channel."
tags:
- finops
- cloud
- azure
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finops
port: 8080
tools:
- name: handle-azure-cost-anomaly
description: "Given an Azure subscription, resource group, and estimated overage in USD, create a ServiceNow financial incident and post a FinOps alert to the Teams cost management channel."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID where the cost anomaly was detected."
- name: resource_group
in: body
type: string
description: "The resource group generating the cost anomaly."
- name: estimated_overage_usd
in: body
type: number
description: "Estimated spend overage in US dollars."
steps:
- name: create-snow-incident
type: call
call: servicenow.create-incident
with:
short_description: "Azure Cost Anomaly — {{resource_group}} — ${{estimated_overage_usd}}"
category: "cloud_cost"
urgency: "2"
- name: post-finops-alert
type: call
call: msteams.send-message
with:
channel_id: "finops-alerts"
text: "Azure Cost Anomaly: {{resource_group}} ({{subscription_id}}) | Overage: ${{estimated_overage_usd}} | SNOW: {{create-snow-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current month-to-date cost for a specified Azure resource group from Azure Cost Management.
naftiko: "0.5"
info:
label: "Azure Resource Cost Lookup"
description: "Retrieves the current month-to-date cost for a specified Azure resource group from Azure Cost Management."
tags:
- cloud
- finops
- microsoft-azure
capability:
exposes:
- type: mcp
namespace: cloud-costs
port: 8080
tools:
- name: get-resource-group-cost
description: "Given an Azure resource group, return the month-to-date spend."
inputParameters:
- name: resource_group
in: body
type: string
description: "Azure resource group name."
- name: subscription_id
in: body
type: string
description: "Azure subscription ID."
call: azure.get-cost
with:
subscription: "{{subscription_id}}"
rg: "{{resource_group}}"
outputParameters:
- name: total_cost
type: string
mapping: "$.properties.rows[0][0]"
- name: currency
type: string
mapping: "$.properties.rows[0][1]"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: cost-management
path: "/subscriptions/{{subscription}}/resourceGroups/{{rg}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01"
inputParameters:
- name: subscription
in: path
- name: rg
in: path
operations:
- name: get-cost
method: POST
Queries Azure security center for posture score, creates Jira remediation tasks, and notifies the cloud security team.
naftiko: "0.5"
info:
label: "Azure Security Posture Assessment"
description: "Queries Azure security center for posture score, creates Jira remediation tasks, and notifies the cloud security team."
tags:
- security
- azure
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: azure_security_posture_assessment
description: "Queries Azure security center for posture score, creates Jira remediation tasks, and notifies the cloud security team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Azure Security Posture Assessment: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Azure Security Posture Assessment for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Reconciles client billing between Salesforce time entries and Oracle financials, posting exceptions to the finance team.
naftiko: "0.5"
info:
label: "Client Billing Reconciliation Workflow"
description: "Reconciles client billing between Salesforce time entries and Oracle financials, posting exceptions to the finance team."
tags:
- finance
- billing
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: client_billing_reconciliation_workflow
description: "Reconciles client billing between Salesforce time entries and Oracle financials, posting exceptions to the finance team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Client Billing Reconciliation Workflow: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Client Billing Reconciliation Workflow for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Provisions a secure SharePoint data room for client engagements, sets Okta access controls, and notifies the engagement team.
naftiko: "0.5"
info:
label: "Client Data Room Provisioning"
description: "Provisions a secure SharePoint data room for client engagements, sets Okta access controls, and notifies the engagement team."
tags:
- engagement
- sharepoint
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: client_data_room_provisioning
description: "Provisions a secure SharePoint data room for client engagements, sets Okta access controls, and notifies the engagement team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Client Data Room Provisioning: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Client Data Room Provisioning for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Validates client independence requirements against Salesforce relationships, checks Snowflake records, and notifies ethics team.
naftiko: "0.5"
info:
label: "Client Independence Check Workflow"
description: "Validates client independence requirements against Salesforce relationships, checks Snowflake records, and notifies ethics team."
tags:
- compliance
- independence
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: client_independence_check_workflow
description: "Validates client independence requirements against Salesforce relationships, checks Snowflake records, and notifies ethics team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Client Independence Check Workflow: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Client Independence Check Workflow for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a new engagement is won, creates a Jira project, provisions a SharePoint site, creates a Teams channel, and notifies the engagement lead.
naftiko: "0.5"
info:
label: "Client Project Kickoff Orchestration"
description: "When a new engagement is won, creates a Jira project, provisions a SharePoint site, creates a Teams channel, and notifies the engagement lead."
tags:
- project-management
- onboarding
- salesforce
- jira
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: project-kickoff
port: 8080
tools:
- name: kickoff-client-project
description: "Given a Salesforce opportunity ID, create project infrastructure and notify lead."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opp_id: "{{opportunity_id}}"
- name: create-jira-project
type: call
call: jira.create-project
with:
name: "{{get-opportunity.Name}}"
key: "{{get-opportunity.Project_Code__c}}"
- name: create-teams-channel
type: call
call: msteams.create-channel
with:
team_id: "$secrets.consulting_team_id"
displayName: "{{get-opportunity.Name}}"
- name: notify-lead
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.consulting_team_id"
channel_id: "{{create-teams-channel.id}}"
text: "Project infrastructure ready for {{get-opportunity.Name}}. Jira: {{create-jira-project.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opp_id}}"
inputParameters:
- name: opp_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: projects
path: "/project"
operations:
- name: create-project
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels"
inputParameters:
- name: team_id
in: path
operations:
- name: create-channel
method: POST
- 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
Pulls client data from Salesforce, retrieves relevant case studies from Confluence, checks team availability in Workday, and creates a proposal tracking task in Jira.
naftiko: "0.5"
info:
label: "Client Proposal Generation Workflow"
description: "Pulls client data from Salesforce, retrieves relevant case studies from Confluence, checks team availability in Workday, and creates a proposal tracking task in Jira."
tags:
- sales
- proposals
- salesforce
- confluence
- workday
- jira
capability:
exposes:
- type: mcp
namespace: sales-proposals
port: 8080
tools:
- name: prepare-proposal
description: "Given a Salesforce opportunity, gather supporting data and set up proposal tracking."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opp_id: "{{opportunity_id}}"
- name: find-case-studies
type: call
call: confluence.search-page
with:
title: "case study {{get-opportunity.Industry__c}}"
- name: check-availability
type: call
call: workday.get-practice-headcount
with:
practice: "{{get-opportunity.Practice__c}}"
- name: create-proposal-task
type: call
call: jira.create-issue
with:
project: PROPOSALS
issuetype: Task
summary: "Proposal: {{get-opportunity.Name}} - {{get-opportunity.Account.Name}}"
description: "Value: {{get-opportunity.Amount}}, Industry: {{get-opportunity.Industry__c}}, Case studies found: {{find-case-studies.results.length}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opp_id}}"
inputParameters:
- name: opp_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: confluence
baseUri: "https://pwc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content?title={{title}}&expand=space"
inputParameters:
- name: title
in: query
operations:
- name: search-page
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount
path: "/workers?practice={{practice}}"
inputParameters:
- name: practice
in: query
operations:
- name: get-practice-headcount
method: GET
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Analyzes Azure cloud costs, identifies optimization opportunities in Snowflake, creates Jira action items, and posts savings recommendations to the FinOps Teams channel.
naftiko: "0.5"
info:
label: "Cloud Cost Optimization Orchestration"
description: "Analyzes Azure cloud costs, identifies optimization opportunities in Snowflake, creates Jira action items, and posts savings recommendations to the FinOps Teams channel."
tags:
- cloud
- finops
- microsoft-azure
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cloud-optimization
port: 8080
tools:
- name: optimize-cloud-costs
description: "Analyze cloud costs and create optimization action items."
inputParameters:
- name: billing_month
in: body
type: string
description: "Billing month to analyze."
steps:
- name: get-costs
type: call
call: azure.get-cost
with:
subscription: "$secrets.azure_subscription_id"
rg: "all"
- name: analyze-savings
type: call
call: snowflake.execute-query
with:
statement: "SELECT * FROM finops.cost_optimization_recommendations WHERE billing_month = '{{billing_month}}'"
warehouse: "FINOPS_WH"
- name: create-actions
type: call
call: jira.create-issue
with:
project: FINOPS
issuetype: Task
summary: "Cloud cost optimization actions for {{billing_month}}"
- name: post-recommendations
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.finops_team_id"
channel_id: "$secrets.finops_channel_id"
text: "Cloud cost analysis for {{billing_month}}: Total={{get-costs.total_cost}}, Optimization opportunities={{analyze-savings.row_count}}. Jira: {{create-actions.key}}"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: cost-management
path: "/subscriptions/{{subscription}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01"
inputParameters:
- name: subscription
in: path
operations:
- name: get-cost
method: POST
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries Workday for overdue compliance training, creates ServiceNow ticket, and notifies managers.
naftiko: "0.5"
info:
label: "Compliance Training Overdue Alert"
description: "Queries Workday for overdue compliance training, creates ServiceNow ticket, and notifies managers."
tags:
- hr
- compliance
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: compliance_training_overdue_alert
description: "Queries Workday for overdue compliance training, creates ServiceNow ticket, and notifies managers."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Compliance Training Overdue Alert: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Compliance Training Overdue Alert for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Audits Confluence pages for outdated content, creates Jira update tasks, and notifies content owners.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Audit"
description: "Audits Confluence pages for outdated content, creates Jira update tasks, and notifies content owners."
tags:
- collaboration
- confluence
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: confluence_knowledge_base_audit
description: "Audits Confluence pages for outdated content, creates Jira update tasks, and notifies content owners."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Confluence Knowledge Base Audit: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Confluence Knowledge Base Audit for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Searches for a Confluence page by title and returns the page ID, space, and last updated date.
naftiko: "0.5"
info:
label: "Confluence Page Lookup"
description: "Searches for a Confluence page by title and returns the page ID, space, and last updated date."
tags:
- knowledge-management
- documentation
- confluence
capability:
exposes:
- type: mcp
namespace: knowledge-pages
port: 8080
tools:
- name: search-page-by-title
description: "Given a Confluence page title, return the page ID, space key, and last modified date."
inputParameters:
- name: page_title
in: body
type: string
description: "Title of the Confluence page."
call: confluence.search-page
with:
title: "{{page_title}}"
outputParameters:
- name: page_id
type: string
mapping: "$.results[0].id"
- name: space_key
type: string
mapping: "$.results[0].space.key"
consumes:
- type: http
namespace: confluence
baseUri: "https://pwc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content?title={{title}}&expand=space,version"
inputParameters:
- name: title
in: query
operations:
- name: search-page
method: GET
Monitors upcoming contract renewals in Salesforce, creates Jira tracking tickets, and notifies account managers via Teams.
naftiko: "0.5"
info:
label: "Contract Renewal Tracking Orchestration"
description: "Monitors upcoming contract renewals in Salesforce, creates Jira tracking tickets, and notifies account managers via Teams."
tags:
- sales
- contract-management
- salesforce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: contract-renewals
port: 8080
tools:
- name: process-upcoming-renewals
description: "Find contracts expiring soon and create tracking tickets."
inputParameters:
- name: days_ahead
in: body
type: integer
description: "Days ahead to look for renewals."
steps:
- name: get-expiring
type: call
call: salesforce.query-contracts
with:
days: "{{days_ahead}}"
- name: create-ticket
type: call
call: jira.create-issue
with:
project: RENEWALS
issuetype: Task
summary: "{{get-expiring.totalSize}} contracts expiring within {{days_ahead}} days"
- name: notify
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.sales_team_id"
channel_id: "$secrets.renewals_channel_id"
text: "{{get-expiring.totalSize}} contracts expiring within {{days_ahead}} days. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contracts
path: "/query?q=SELECT+Id,Name,EndDate+FROM+Contract+WHERE+EndDate=NEXT_N_DAYS:{{days}}"
inputParameters:
- name: days
in: query
operations:
- name: query-contracts
method: GET
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a DLP alert fires, queries Splunk for context, creates ServiceNow security incident, and notifies the security team.
naftiko: "0.5"
info:
label: "Data Loss Prevention Alert Response"
description: "When a DLP alert fires, queries Splunk for context, creates ServiceNow security incident, and notifies the security team."
tags:
- security
- dlp
- splunk
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: data_loss_prevention_alert_response
description: "When a DLP alert fires, queries Splunk for context, creates ServiceNow security incident, and notifies the security team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Data Loss Prevention Alert Response: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Data Loss Prevention Alert Response for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a Snowflake pipeline task fails, retrieves error details, creates a Jira bug ticket, notifies the data team in Teams, and triggers a retry.
naftiko: "0.5"
info:
label: "Data Pipeline Failure Recovery"
description: "When a Snowflake pipeline task fails, retrieves error details, creates a Jira bug ticket, notifies the data team in Teams, and triggers a retry."
tags:
- data-engineering
- incident-response
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: data-recovery
port: 8080
tools:
- name: recover-failed-pipeline
description: "Given a failed pipeline task ID, capture errors, create ticket, notify team, and retry."
inputParameters:
- name: task_id
in: body
type: string
description: "Snowflake task ID that failed."
steps:
- name: get-task-history
type: call
call: snowflake.execute-query
with:
statement: "SELECT * FROM table(information_schema.task_history(task_name=>'{{task_id}}')) ORDER BY scheduled_time DESC LIMIT 1"
warehouse: "DATA_ENG_WH"
- name: create-bug
type: call
call: jira.create-issue
with:
project: DATA
issuetype: Bug
summary: "Pipeline failure: {{task_id}}"
description: "Error: {{get-task-history.data[0]}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.data_eng_team_id"
channel_id: "$secrets.data_alerts_channel_id"
text: "Pipeline {{task_id}} failed. Jira: {{create-bug.key}}. Investigating..."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When a Databricks job fails, creates a Jira ticket and notifies the data platform team.
naftiko: "0.5"
info:
label: "Databricks Job Failure Alert"
description: "When a Databricks job fails, creates a Jira ticket and notifies the data platform team."
tags:
- data-engineering
- databricks
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: databricks_job_failure_alert
description: "When a Databricks job fails, creates a Jira ticket and notifies the data platform team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Databricks Job Failure Alert: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Databricks Job Failure Alert for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Checks the status of a Databricks job run by run ID, returning state and duration.
naftiko: "0.5"
info:
label: "Databricks Job Run Status"
description: "Checks the status of a Databricks job run by run ID, returning state and duration."
tags:
- data-engineering
- analytics
- databricks
capability:
exposes:
- type: mcp
namespace: data-jobs
port: 8080
tools:
- name: get-run-status
description: "Given a Databricks run ID, return the run state and start time."
inputParameters:
- name: run_id
in: body
type: string
description: "Databricks job run ID."
call: databricks.get-run
with:
run_id: "{{run_id}}"
outputParameters:
- name: state
type: string
mapping: "$.state.life_cycle_state"
- name: result_state
type: string
mapping: "$.state.result_state"
consumes:
- type: http
namespace: databricks
baseUri: "https://pwc.cloud.databricks.com/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: runs
path: "/jobs/runs/get?run_id={{run_id}}"
inputParameters:
- name: run_id
in: query
operations:
- name: get-run
method: GET
Fetches the current Datadog monitor status for PwC's internal platforms and posts a health digest to the IT operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Datadog Platform Monitoring Digest"
description: "Fetches the current Datadog monitor status for PwC's internal platforms and posts a health digest to the IT operations Microsoft Teams channel."
tags:
- observability
- datadog
- reporting
- microsoft-teams
- infrastructure
capability:
exposes:
- type: mcp
namespace: platform-reporting
port: 8080
tools:
- name: digest-platform-health
description: "Given a Datadog environment tag, list all monitors and post a health digest with OK, Warning, and Critical counts to the IT operations Teams channel."
inputParameters:
- name: environment_tag
in: body
type: string
description: "The Datadog environment tag to filter monitors (e.g., 'env:production')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the IT operations digest."
steps:
- name: list-monitors
type: call
call: datadog.list-monitors
with:
tags: "{{environment_tag}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Platform Health ({{environment_tag}}): Total: {{list-monitors.total}} | OK: {{list-monitors.ok_count}} | Warning: {{list-monitors.warning_count}} | Critical: {{list-monitors.critical_count}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor"
inputParameters:
- name: tags
in: query
operations:
- name: list-monitors
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the current health status of a service monitored in Datadog, returning overall status and active alert count.
naftiko: "0.5"
info:
label: "Datadog Service Health Lookup"
description: "Checks the current health status of a service monitored in Datadog, returning overall status and active alert count."
tags:
- monitoring
- observability
- datadog
capability:
exposes:
- type: mcp
namespace: monitoring-health
port: 8080
tools:
- name: get-service-health
description: "Given a Datadog service name, return the current overall status and number of active alerts."
inputParameters:
- name: service_name
in: body
type: string
description: "Name of the service in Datadog."
call: datadog.get-service-status
with:
service: "{{service_name}}"
outputParameters:
- name: overall_status
type: string
mapping: "$.data.attributes.overall_status"
- name: active_alerts
type: integer
mapping: "$.data.attributes.active_alert_count"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
headerName: "DD-API-KEY"
resources:
- name: services
path: "/services/definitions/{{service}}"
inputParameters:
- name: service
in: path
operations:
- name: get-service-status
method: GET
When Dynatrace detects performance degradation, fetches details, creates a ServiceNow incident, and alerts SRE via Teams.
naftiko: "0.5"
info:
label: "Dynatrace Performance Alert Handler"
description: "When Dynatrace detects performance degradation, fetches details, creates a ServiceNow incident, and alerts SRE via Teams."
tags:
- monitoring
- performance
- dynatrace
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: performance-alerts
port: 8080
tools:
- name: handle-performance-alert
description: "Given a Dynatrace problem ID, create incident and notify SRE."
inputParameters:
- name: problem_id
in: body
type: string
description: "Dynatrace problem ID."
steps:
- name: get-problem
type: call
call: dynatrace.get-problem
with:
problem_id: "{{problem_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Performance: {{get-problem.title}}"
category: performance
- name: notify-sre
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.sre_team_id"
channel_id: "$secrets.sre_alerts_channel_id"
text: "Performance alert: {{get-problem.title}}. SNOW: {{create-incident.number}}"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://pwc.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: problems
path: "/problems/{{problem_id}}"
inputParameters:
- name: problem_id
in: path
operations:
- name: get-problem
method: GET
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
When an employee departs, revokes Okta access, closes Workday record, and notifies IT and HR.
naftiko: "0.5"
info:
label: "Employee Offboarding Workflow"
description: "When an employee departs, revokes Okta access, closes Workday record, and notifies IT and HR."
tags:
- hr
- offboarding
- workday
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: employee_offboarding_workflow
description: "When an employee departs, revokes Okta access, closes Workday record, and notifies IT and HR."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Employee Offboarding Workflow: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Employee Offboarding Workflow for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When an employee transfers practices in Workday, updates Okta groups, reassigns Jira issues, and notifies both old and new managers via Teams.
naftiko: "0.5"
info:
label: "Employee Role Transfer Orchestration"
description: "When an employee transfers practices in Workday, updates Okta groups, reassigns Jira issues, and notifies both old and new managers via Teams."
tags:
- hr
- access-management
- workday
- okta
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-transfers
port: 8080
tools:
- name: process-role-transfer
description: "Given a Workday employee ID and new practice, update access and notify managers."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
- name: new_practice
in: body
type: string
description: "New practice name."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{employee_id}}"
- name: update-okta
type: call
call: okta.update-user-groups
with:
user_id: "{{get-employee.work_email}}"
new_group: "{{new_practice}}"
- name: reassign-work
type: call
call: jira.bulk-reassign
with:
current_assignee: "{{get-employee.work_email}}"
- name: notify-managers
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.hr_team_id"
channel_id: "$secrets.hr_transfers_channel_id"
text: "{{get-employee.full_name}} transferring from {{get-employee.department}} to {{new_practice}}. Access updated."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://pwc.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: user-groups
path: "/users/{{user_id}}/groups"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user-groups
method: PUT
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: bulk-operations
path: "/bulk/issues/reassign"
operations:
- name: bulk-reassign
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
Closes out an engagement by updating Salesforce stage, archiving Jira project, and notifying stakeholders via Teams.
naftiko: "0.5"
info:
label: "Engagement Closeout Orchestration"
description: "Closes out an engagement by updating Salesforce stage, archiving Jira project, and notifying stakeholders via Teams."
tags:
- consulting
- project-management
- salesforce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: engagement-closeout
port: 8080
tools:
- name: close-engagement
description: "Given a Salesforce opportunity ID, perform closeout across systems."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID."
steps:
- name: get-engagement
type: call
call: salesforce.get-opportunity
with:
opp_id: "{{opportunity_id}}"
- name: update-salesforce
type: call
call: salesforce.update-opportunity
with:
opp_id: "{{opportunity_id}}"
StageName: "Closed Won"
- name: close-jira
type: call
call: jira.archive-project
with:
project_key: "{{get-engagement.Project_Code__c}}"
- name: notify
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.consulting_team_id"
channel_id: "$secrets.engagement_channel_id"
text: "Engagement {{get-engagement.Name}} closed out. Salesforce updated, Jira archived."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opp_id}}"
inputParameters:
- name: opp_id
in: path
operations:
- name: get-opportunity
method: GET
- name: update-opportunity
method: PATCH
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: projects
path: "/project/{{project_key}}/archive"
inputParameters:
- name: project_key
in: path
operations:
- name: archive-project
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
Pulls engagement metrics from Salesforce, workpaper status from SharePoint, team utilization from Workday, and compiles a quality review summary posted to Teams.
naftiko: "0.5"
info:
label: "Engagement Quality Review Workflow"
description: "Pulls engagement metrics from Salesforce, workpaper status from SharePoint, team utilization from Workday, and compiles a quality review summary posted to Teams."
tags:
- quality
- audit
- salesforce
- sharepoint
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: quality-review
port: 8080
tools:
- name: run-quality-review
description: "Given an engagement ID, compile quality metrics from all systems and post review summary."
inputParameters:
- name: engagement_id
in: body
type: string
description: "Salesforce engagement opportunity ID."
steps:
- name: get-engagement
type: call
call: salesforce.get-opportunity
with:
opp_id: "{{engagement_id}}"
- name: check-workpapers
type: call
call: sharepoint.search
with:
query: "{{get-engagement.Name}} workpaper"
- name: get-team-utilization
type: call
call: workday.get-project-hours
with:
project_id: "{{get-engagement.Project_Code__c}}"
- name: post-review
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.quality_team_id"
channel_id: "$secrets.quality_review_channel_id"
text: "EQR for {{get-engagement.Name}}: Workpapers found={{check-workpapers.count}}, Team hours={{get-team-utilization.total_hours}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opp_id}}"
inputParameters:
- name: opp_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/search/query"
operations:
- name: search
method: POST
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: project-hours
path: "/projects/{{project_id}}/hours"
inputParameters:
- name: project_id
in: path
operations:
- name: get-project-hours
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries Workday for available staff, matches skills in Snowflake, and posts staffing recommendations to engagement leads.
naftiko: "0.5"
info:
label: "Engagement Staffing Optimization"
description: "Queries Workday for available staff, matches skills in Snowflake, and posts staffing recommendations to engagement leads."
tags:
- engagement
- workday
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: engagement_staffing_optimization
description: "Queries Workday for available staff, matches skills in Snowflake, and posts staffing recommendations to engagement leads."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Engagement Staffing Optimization: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Engagement Staffing Optimization for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a GitHub Dependabot or code scanning alert is raised in a PwC internal repository, creates a Jira security task and notifies the information security team in Microsoft Teams.
naftiko: "0.5"
info:
label: "GitHub Code Repository Security Scan Alert"
description: "When a GitHub Dependabot or code scanning alert is raised in a PwC internal repository, creates a Jira security task and notifies the information security team in Microsoft Teams."
tags:
- security
- devops
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-devops
port: 8080
tools:
- name: handle-security-alert
description: "Given a GitHub repository, security alert number, and severity, create a Jira security task and notify the PwC information security team in Teams."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in 'org/repo' format."
- name: alert_number
in: body
type: integer
description: "The GitHub security alert number."
- name: severity
in: body
type: string
description: "Alert severity: 'critical', 'high', 'medium', or 'low'."
steps:
- name: get-alert
type: call
call: github.get-security-alert
with:
repo: "{{repo}}"
alert_number: "{{alert_number}}"
- name: create-jira-task
type: call
call: jira.create-issue
with:
project_key: "SEC"
issuetype: "Task"
summary: "[{{severity}}] Security alert — {{repo}} — {{get-alert.rule_id}}"
description: "Alert {{alert_number}} in {{repo}}. Severity: {{severity}}. Rule: {{get-alert.rule_description}}. URL: {{get-alert.html_url}}"
- name: notify-infosec
type: call
call: msteams.send-message
with:
channel_id: "security-alerts"
text: "Security Alert [{{severity}}]: {{repo}} | Rule: {{get-alert.rule_id}} | Jira: {{create-jira-task.key}} | GitHub: {{get-alert.html_url}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: code-scanning-alerts
path: "/repos/{{repo}}/code-scanning/alerts/{{alert_number}}"
inputParameters:
- name: repo
in: path
- name: alert_number
in: path
operations:
- name: get-security-alert
method: GET
- type: http
namespace: jira
baseUri: "https://pwc.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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When Dependabot finds a vulnerability, creates Jira ticket and alerts security team.
naftiko: "0.5"
info:
label: "GitHub Dependabot Vulnerability Triage"
description: "When Dependabot finds a vulnerability, creates Jira ticket and alerts security team."
tags:
- security
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: github_dependabot_vulnerability_triage
description: "When Dependabot finds a vulnerability, creates Jira ticket and alerts security team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "GitHub Dependabot Vulnerability Triage: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "GitHub Dependabot Vulnerability Triage for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves the latest repository info from GitHub including default branch, open issues count, and last update.
naftiko: "0.5"
info:
label: "GitHub Repository Status Lookup"
description: "Retrieves the latest repository info from GitHub including default branch, open issues count, and last update."
tags:
- engineering
- devops
- github
capability:
exposes:
- type: mcp
namespace: dev-repos
port: 8080
tools:
- name: get-repo-status
description: "Given a GitHub repository name, return the default branch, open issues count, and last updated time."
inputParameters:
- name: repo_name
in: body
type: string
description: "Repository name in org/repo format."
call: github.get-repo
with:
repo: "{{repo_name}}"
outputParameters:
- name: default_branch
type: string
mapping: "$.default_branch"
- name: open_issues_count
type: integer
mapping: "$.open_issues_count"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
Retrieves deal details from HubSpot by deal ID, returning name, stage, amount, and close date.
naftiko: "0.5"
info:
label: "HubSpot Deal Lookup"
description: "Retrieves deal details from HubSpot by deal ID, returning name, stage, amount, and close date."
tags:
- sales
- crm
- hubspot
capability:
exposes:
- type: mcp
namespace: crm-deals
port: 8080
tools:
- name: get-deal
description: "Given a HubSpot deal ID, return deal name, stage, amount, and close date."
inputParameters:
- name: deal_id
in: body
type: string
description: "HubSpot deal ID."
call: hubspot.get-deal
with:
deal_id: "{{deal_id}}"
outputParameters:
- name: deal_name
type: string
mapping: "$.properties.dealname"
- name: stage
type: string
mapping: "$.properties.dealstage"
- name: amount
type: string
mapping: "$.properties.amount"
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/{{deal_id}}"
inputParameters:
- name: deal_id
in: path
operations:
- name: get-deal
method: GET
Tracks IT asset lifecycles in ServiceNow CMDB, identifies end-of-life assets, and creates replacement requests.
naftiko: "0.5"
info:
label: "IT Asset Lifecycle Management"
description: "Tracks IT asset lifecycles in ServiceNow CMDB, identifies end-of-life assets, and creates replacement requests."
tags:
- itsm
- asset-management
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: it_asset_lifecycle_management
description: "Tracks IT asset lifecycles in ServiceNow CMDB, identifies end-of-life assets, and creates replacement requests."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "IT Asset Lifecycle Management: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "IT Asset Lifecycle Management for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves details for a specific Jira issue by key, including status, assignee, priority, and summary.
naftiko: "0.5"
info:
label: "Jira Issue Lookup"
description: "Retrieves details for a specific Jira issue by key, including status, assignee, priority, and summary."
tags:
- project-management
- engineering
- jira
capability:
exposes:
- type: mcp
namespace: project-issues
port: 8080
tools:
- name: get-issue
description: "Given a Jira issue key, return the issue summary, status, assignee, and priority."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key."
call: jira.get-issue
with:
key: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
consumes:
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{key}}"
inputParameters:
- name: key
in: path
operations:
- name: get-issue
method: GET
When a pod crash is detected, gathers Splunk logs, creates ServiceNow incident, and alerts platform team.
naftiko: "0.5"
info:
label: "Kubernetes Pod Failure Escalation"
description: "When a pod crash is detected, gathers Splunk logs, creates ServiceNow incident, and alerts platform team."
tags:
- devops
- kubernetes
- splunk
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: kubernetes_pod_failure_escalation
description: "When a pod crash is detected, gathers Splunk logs, creates ServiceNow incident, and alerts platform team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Kubernetes Pod Failure Escalation: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Kubernetes Pod Failure Escalation for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team.
naftiko: "0.5"
info:
label: "LinkedIn Talent Acquisition Campaign"
description: "Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team."
tags:
- hr
- talent-acquisition
- workday
- linkedin
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: linkedin_talent_acquisition_campaign
description: "Pulls open positions from Workday, creates LinkedIn postings, and posts summary to talent team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "LinkedIn Talent Acquisition Campaign: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "LinkedIn Talent Acquisition Campaign for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Fetches PwC LinkedIn company page engagement metrics for thought leadership content and posts a monthly digest to the brand and communications Microsoft Teams channel.
naftiko: "0.5"
info:
label: "LinkedIn Thought Leadership Engagement Digest"
description: "Fetches PwC LinkedIn company page engagement metrics for thought leadership content and posts a monthly digest to the brand and communications Microsoft Teams channel."
tags:
- marketing
- linkedin
- social
- reporting
- microsoft-teams
- thought-leadership
capability:
exposes:
- type: mcp
namespace: brand-reporting
port: 8080
tools:
- name: digest-thought-leadership-engagement
description: "Retrieve LinkedIn organization page share statistics for the past 30 days and post a thought leadership performance digest to the communications Teams channel."
inputParameters:
- name: organization_id
in: body
type: string
description: "The LinkedIn organization ID for PwC's company page."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for brand and communications team."
steps:
- name: get-share-stats
type: call
call: linkedin.get-share-statistics
with:
organization_id: "{{organization_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "LinkedIn Thought Leadership (30d): Impressions: {{get-share-stats.impressions}} | Reactions: {{get-share-stats.likes}} | Shares: {{get-share-stats.shares}} | Comments: {{get-share-stats.comments}} | Follower Growth: +{{get-share-stats.follower_gain}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: share-statistics
path: "/organizationalEntityShareStatistics"
inputParameters:
- name: organization_id
in: query
operations:
- name: get-share-statistics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Microsoft 365 license usage, identifies unused licenses, and posts optimization report to IT.
naftiko: "0.5"
info:
label: "Microsoft 365 License Optimization"
description: "Queries Microsoft 365 license usage, identifies unused licenses, and posts optimization report to IT."
tags:
- it
- microsoft-365
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: microsoft_365_license_optimization
description: "Queries Microsoft 365 license usage, identifies unused licenses, and posts optimization report to IT."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Microsoft 365 License Optimization: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Microsoft 365 License Optimization for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves Microsoft 365 license assignment and usage data from Microsoft Graph for IT asset management.
naftiko: "0.5"
info:
label: "Microsoft 365 License Usage Report"
description: "Retrieves Microsoft 365 license assignment and usage data from Microsoft Graph for IT asset management."
tags:
- it
- license-management
- microsoft-365
capability:
exposes:
- type: mcp
namespace: it-licensing
port: 8080
tools:
- name: get-license-usage
description: "Retrieve Microsoft 365 license SKUs with assigned and consumed unit counts."
inputParameters: []
call: msgraph.get-subscribed-skus
with: {}
outputParameters:
- name: skus
type: array
mapping: "$.value"
consumes:
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: subscribed-skus
path: "/subscribedSkus"
operations:
- name: get-subscribed-skus
method: GET
Sends a notification message to a specified Microsoft Teams channel using the Graph API.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Notification"
description: "Sends a notification message to a specified Microsoft Teams channel using the Graph API."
tags:
- communications
- notifications
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: comms-teams
port: 8080
tools:
- name: send-channel-message
description: "Send a text message to a specified Microsoft Teams channel."
inputParameters:
- name: team_id
in: body
type: string
description: "Microsoft Teams team ID."
- name: channel_id
in: body
type: string
description: "Microsoft Teams channel ID."
- name: message
in: body
type: string
description: "Message text to send."
call: msteams.post-message
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
text: "{{message}}"
outputParameters:
- name: message_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-message
method: POST
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint workspace, and sends a Microsoft Teams welcome message to the new staff member.
naftiko: "0.5"
info:
label: "New Staff Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint workspace, and sends a Microsoft Teams welcome message to the new staff member."
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 PwC onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID for the new PwC staff member."
- name: start_date
in: body
type: string
description: "The staff member's start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-snow-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New staff onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
- name: create-sharepoint-workspace
type: call
call: sharepoint.create-folder
with:
site_id: "hr-onboarding-site"
folder_path: "NewStaff/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
channel_id: "hr-new-staff"
text: "Welcome to PwC, {{get-employee.full_name}}! Your IT onboarding ticket: {{create-snow-ticket.number}}. Start date: {{start_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/pwc/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://pwc.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.sharepoint_token"
resources:
- name: folders
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.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Identifies Okta users who are non-compliant with MFA policy and creates a ServiceNow security task for the information security team to remediate.
naftiko: "0.5"
info:
label: "Okta MFA Non-Compliance Alert"
description: "Identifies Okta users who are non-compliant with MFA policy and creates a ServiceNow security task for the information security team to remediate."
tags:
- security
- identity
- okta
- servicenow
- compliance
- mfa
capability:
exposes:
- type: mcp
namespace: security-compliance
port: 8080
tools:
- name: alert-mfa-non-compliance
description: "Given an Okta group ID, list users without MFA enrolled and create a ServiceNow security task listing the non-compliant accounts for remediation."
inputParameters:
- name: okta_group_id
in: body
type: string
description: "The Okta group ID to audit for MFA compliance."
steps:
- name: list-non-mfa-users
type: call
call: okta.list-users-without-mfa
with:
group_id: "{{okta_group_id}}"
- name: create-remediation-task
type: call
call: servicenow.create-incident
with:
short_description: "MFA Non-Compliance — {{list-non-mfa-users.count}} users in group {{okta_group_id}}"
category: "security_compliance"
description: "Non-compliant users: {{list-non-mfa-users.emails}}"
consumes:
- type: http
namespace: okta
baseUri: "https://pwc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_key"
placement: header
resources:
- name: users
path: "/groups/{{group_id}}/users"
inputParameters:
- name: group_id
in: path
operations:
- name: list-users-without-mfa
method: GET
- type: http
namespace: servicenow
baseUri: "https://pwc.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
Runs quarterly access certification for privileged Okta accounts, creates ServiceNow audit records, and notifies security.
naftiko: "0.5"
info:
label: "Okta Privileged Access Certification"
description: "Runs quarterly access certification for privileged Okta accounts, creates ServiceNow audit records, and notifies security."
tags:
- security
- identity
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: okta_privileged_access_certification
description: "Runs quarterly access certification for privileged Okta accounts, creates ServiceNow audit records, and notifies security."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Okta Privileged Access Certification: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Okta Privileged Access Certification for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Lists Okta users in privileged access groups and creates a ServiceNow access review task for the security team to certify quarterly.
naftiko: "0.5"
info:
label: "Okta Privileged Access Review"
description: "Lists Okta users in privileged access groups and creates a ServiceNow access review task for the security team to certify quarterly."
tags:
- security
- identity
- okta
- servicenow
- access-review
- compliance
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-access-review
description: "Given an Okta privileged group ID and review quarter label, list all members and create a ServiceNow access review task for certification."
inputParameters:
- name: okta_group_id
in: body
type: string
description: "The Okta privileged access group ID to audit."
- name: review_quarter
in: body
type: string
description: "The access review quarter label (e.g., 'Q2-2026')."
steps:
- name: list-group-members
type: call
call: okta.list-group-users
with:
group_id: "{{okta_group_id}}"
- name: create-review-task
type: call
call: servicenow.create-incident
with:
short_description: "Access Review {{review_quarter}} — Group {{okta_group_id}}"
category: "security_access_review"
description: "{{list-group-members.count}} users require certification. Emails: {{list-group-members.emails}}"
consumes:
- type: http
namespace: okta
baseUri: "https://pwc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_key"
placement: header
resources:
- name: group-users
path: "/groups/{{group_id}}/users"
inputParameters:
- name: group_id
in: path
operations:
- name: list-group-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
When a new hire's Workday record is confirmed, provisions the appropriate Okta group membership for their service line and practice, notifying IT in Teams.
naftiko: "0.5"
info:
label: "Okta Staff Access Provisioning"
description: "When a new hire's Workday record is confirmed, provisions the appropriate Okta group membership for their service line and practice, notifying IT in Teams."
tags:
- identity
- security
- okta
- workday
- microsoft-teams
- access-management
capability:
exposes:
- type: mcp
namespace: access-provisioning
port: 8080
tools:
- name: provision-staff-access
description: "Given a Workday worker ID and target Okta group ID for the staff member's service line, add the user to the group and notify IT via Teams."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID for the new staff member."
- name: okta_group_id
in: body
type: string
description: "The Okta group ID corresponding to the staff member's service line."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: add-to-group
type: call
call: okta.add-user-to-group
with:
group_id: "{{okta_group_id}}"
user_email: "{{get-employee.email}}"
- name: notify-it
type: call
call: msteams.send-message
with:
channel_id: "it-ops-channel"
text: "Access provisioned for {{get-employee.full_name}} — Okta group {{okta_group_id}} added. Email: {{get-employee.email}}."
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: "/pwc/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://pwc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_key"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users/{{user_email}}"
inputParameters:
- name: group_id
in: path
- name: user_email
in: path
operations:
- name: add-user-to-group
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Looks up a user in Okta by email and returns their account status, last login time, and display name.
naftiko: "0.5"
info:
label: "Okta User Status Lookup"
description: "Looks up a user in Okta by email and returns their account status, last login time, and display name."
tags:
- security
- identity
- okta
capability:
exposes:
- type: mcp
namespace: identity-users
port: 8080
tools:
- name: get-user-status
description: "Given a user email, look up their Okta account status and last login."
inputParameters:
- name: user_email
in: body
type: string
description: "User email address."
call: okta.get-user
with:
email: "{{user_email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: last_login
type: string
mapping: "$.lastLogin"
- name: display_name
type: string
mapping: "$.profile.displayName"
consumes:
- type: http
namespace: okta
baseUri: "https://pwc.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: get-user
method: GET
Retrieves general ledger account balances from Oracle Cloud for a given period.
naftiko: "0.5"
info:
label: "Oracle GL Balance Lookup"
description: "Retrieves general ledger account balances from Oracle Cloud for a given period."
tags:
- finance
- accounting
- oracle
capability:
exposes:
- type: mcp
namespace: finance-gl
port: 8080
tools:
- name: get-gl-balance
description: "Given an Oracle ledger ID and period, return the GL balance."
inputParameters:
- name: ledger_id
in: body
type: string
description: "Oracle general ledger ID."
- name: period_name
in: body
type: string
description: "Accounting period."
call: oracle.get-balance
with:
ledger_id: "{{ledger_id}}"
period: "{{period_name}}"
outputParameters:
- name: balance
type: string
mapping: "$.items[0].balance"
- name: currency
type: string
mapping: "$.items[0].currencyCode"
consumes:
- type: http
namespace: oracle
baseUri: "https://pwc.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: basic
username: "$secrets.oracle_user"
password: "$secrets.oracle_password"
resources:
- name: gl-balances
path: "/glBalances?q=LedgerId={{ledger_id}};AccountingPeriod={{period}}"
inputParameters:
- name: ledger_id
in: query
- name: period
in: query
operations:
- name: get-balance
method: GET
When a P1 IT incident is raised at PwC, creates a ServiceNow P1 incident, annotates Datadog, and alerts the IT engineering team in Microsoft Teams.
naftiko: "0.5"
info:
label: "P1 IT Incident Response Chain"
description: "When a P1 IT incident is raised at PwC, creates a ServiceNow P1 incident, annotates Datadog, and alerts the IT engineering team in Microsoft Teams."
tags:
- itsm
- incident-response
- servicenow
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given an affected PwC system and impact description, create a ServiceNow P1 incident, create a Datadog event annotation, and alert the IT engineering team via Teams."
inputParameters:
- name: affected_system
in: body
type: string
description: "The PwC system or service experiencing the P1 incident."
- name: impact_description
in: body
type: string
description: "Brief description of the business impact."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the engineering on-call team."
steps:
- name: create-p1-incident
type: call
call: servicenow.create-incident
with:
short_description: "P1: {{affected_system}} — {{impact_description}}"
urgency: "1"
priority: "1"
category: "application"
- name: annotate-datadog
type: call
call: datadog.create-event
with:
title: "P1 Incident: {{affected_system}}"
text: "SNOW {{create-p1-incident.number}} — {{impact_description}}"
alert_type: "error"
- name: alert-team
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "P1 INCIDENT: {{affected_system}} | Impact: {{impact_description}} | SNOW: {{create-p1-incident.number}} | Datadog: {{annotate-datadog.url}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pwc.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: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates a new incident in PagerDuty for a specified service, triggering the on-call rotation.
naftiko: "0.5"
info:
label: "PagerDuty Incident Creation"
description: "Creates a new incident in PagerDuty for a specified service, triggering the on-call rotation."
tags:
- incident-management
- on-call
- pagerduty
capability:
exposes:
- type: mcp
namespace: incident-paging
port: 8080
tools:
- name: create-incident
description: "Create a PagerDuty incident with a title and urgency level."
inputParameters:
- name: service_id
in: body
type: string
description: "PagerDuty service ID."
- name: title
in: body
type: string
description: "Incident title."
- name: urgency
in: body
type: string
description: "Urgency level (high or low)."
call: pagerduty.create-incident
with:
service_id: "{{service_id}}"
title: "{{title}}"
urgency: "{{urgency}}"
outputParameters:
- name: incident_id
type: string
mapping: "$.incident.id"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Triggers a refresh of a Power BI dataset to update reports with the latest data from source systems.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Trigger"
description: "Triggers a refresh of a Power BI dataset to update reports with the latest data from source systems."
tags:
- analytics
- reporting
- power-bi
capability:
exposes:
- type: mcp
namespace: analytics-powerbi
port: 8080
tools:
- name: refresh-dataset
description: "Trigger a refresh for a Power BI dataset by dataset ID."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID."
- name: group_id
in: body
type: string
description: "Power BI workspace ID."
call: powerbi.refresh-dataset
with:
group_id: "{{group_id}}"
dataset_id: "{{dataset_id}}"
outputParameters:
- name: request_id
type: string
mapping: "$.requestId"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Triggers a Power BI dataset refresh for the PwC global engagement revenue dashboard and notifies the finance team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Engagement Revenue Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the PwC global engagement revenue dashboard and notifies the finance team in Microsoft Teams."
tags:
- data
- analytics
- power-bi
- finance
- reporting
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-ops
port: 8080
tools:
- name: refresh-revenue-dashboard
description: "Trigger a Power BI refresh for the PwC global engagement revenue dashboard and post a Teams confirmation to the finance analytics team."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the global engagement revenue dashboard."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the finance analytics notification."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Engagement revenue dashboard refresh initiated. Dataset: {{dataset_id}} | Status: {{trigger-refresh.status}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Snowflake for partner billing and utilization data, refreshes Power BI dashboard, and posts to leadership.
naftiko: "0.5"
info:
label: "Power BI Partner Performance Dashboard"
description: "Queries Snowflake for partner billing and utilization data, refreshes Power BI dashboard, and posts to leadership."
tags:
- reporting
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: power_bi_partner_performance_dashboard
description: "Queries Snowflake for partner billing and utilization data, refreshes Power BI dashboard, and posts to leadership."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Power BI Partner Performance Dashboard: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Power BI Partner Performance Dashboard for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Triggers a Power BI dataset refresh for the PwC practice performance dashboard and notifies the operations team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Practice Performance Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the PwC practice performance dashboard and notifies the operations team in Microsoft Teams."
tags:
- data
- analytics
- power-bi
- reporting
- microsoft-teams
- operations
capability:
exposes:
- type: mcp
namespace: operations-bi
port: 8080
tools:
- name: refresh-practice-dashboard
description: "Trigger a Power BI refresh for the PwC practice performance dashboard and notify the operations analytics team in Teams."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the practice performance dashboard."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the operations analytics team."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
dataset_id: "{{dataset_id}}"
- name: notify-team
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Practice performance dashboard refresh initiated. Dataset: {{dataset_id}} | Status: {{trigger-refresh.status}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Orchestrates quarterly close by verifying SAP period status, running Snowflake reconciliation, refreshing Power BI dashboards, and posting summary to Teams.
naftiko: "0.5"
info:
label: "Quarterly Financial Close Orchestration"
description: "Orchestrates quarterly close by verifying SAP period status, running Snowflake reconciliation, refreshing Power BI dashboards, and posting summary to Teams."
tags:
- finance
- accounting
- sap
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-close
port: 8080
tools:
- name: run-quarterly-close
description: "Execute quarterly close checklist across finance systems."
inputParameters:
- name: fiscal_period
in: body
type: string
description: "Fiscal period (e.g., 2026-Q1)."
steps:
- name: run-reconciliation
type: call
call: snowflake.execute-query
with:
statement: "CALL finance.reconciliation_check('{{fiscal_period}}')"
warehouse: "FINANCE_WH"
- name: refresh-dashboard
type: call
call: powerbi.refresh-dataset
with:
group_id: "$secrets.finance_workspace_id"
dataset_id: "$secrets.close_dataset_id"
- name: post-summary
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.finance_team_id"
channel_id: "$secrets.finance_close_channel_id"
text: "Q close for {{fiscal_period}}: Reconciliation rows={{run-reconciliation.row_count}}, Dashboard refreshed."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: 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
Runs compliance checks by pulling access logs from Okta, change records from ServiceNow, queries Snowflake for policy violations, and publishes a compliance report to Confluence.
naftiko: "0.5"
info:
label: "Regulatory Compliance Check Orchestration"
description: "Runs compliance checks by pulling access logs from Okta, change records from ServiceNow, queries Snowflake for policy violations, and publishes a compliance report to Confluence."
tags:
- compliance
- regulatory
- okta
- servicenow
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: compliance-checks
port: 8080
tools:
- name: run-compliance-check
description: "Execute a regulatory compliance check across identity, change management, and data systems."
inputParameters:
- name: regulation
in: body
type: string
description: "Regulation identifier (e.g., SOX, GDPR)."
- name: check_period_start
in: body
type: string
description: "Check period start date."
- name: check_period_end
in: body
type: string
description: "Check period end date."
steps:
- name: get-access-logs
type: call
call: okta.get-system-logs
with:
since: "{{check_period_start}}"
until: "{{check_period_end}}"
- name: get-changes
type: call
call: servicenow.query-changes
with:
start_date: "{{check_period_start}}"
end_date: "{{check_period_end}}"
- name: check-violations
type: call
call: snowflake.execute-query
with:
statement: "SELECT * FROM compliance.policy_violations WHERE regulation = '{{regulation}}' AND check_date BETWEEN '{{check_period_start}}' AND '{{check_period_end}}'"
warehouse: "COMPLIANCE_WH"
- name: publish-report
type: call
call: confluence.create-page
with:
spaceKey: COMPLIANCE
title: "{{regulation}} Compliance Check: {{check_period_start}} to {{check_period_end}}"
body: "Access events: {{get-access-logs.length}}, Changes: {{get-changes.count}}, Violations: {{check-violations.row_count}}"
consumes:
- type: http
namespace: okta
baseUri: "https://pwc.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: logs
path: "/logs?since={{since}}&until={{until}}"
inputParameters:
- name: since
in: query
- name: until
in: query
operations:
- name: get-system-logs
method: GET
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request?sysparm_query=sys_created_onBETWEEN{{start_date}}@{{end_date}}"
inputParameters:
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: query-changes
method: GET
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: confluence
baseUri: "https://pwc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
Triggers a SailPoint access certification, pulls non-compliant users, creates ServiceNow remediation tickets, and notifies managers via Teams.
naftiko: "0.5"
info:
label: "SailPoint Access Certification Workflow"
description: "Triggers a SailPoint access certification, pulls non-compliant users, creates ServiceNow remediation tickets, and notifies managers via Teams."
tags:
- security
- identity-governance
- sailpoint
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: access-certification
port: 8080
tools:
- name: run-access-certification
description: "Trigger access certification and handle non-compliant accounts."
inputParameters:
- name: campaign_name
in: body
type: string
description: "Certification campaign name."
steps:
- name: launch-campaign
type: call
call: sailpoint.create-campaign
with:
name: "{{campaign_name}}"
type: MANAGER
- name: get-violations
type: call
call: sailpoint.get-violations
with:
campaign_id: "{{launch-campaign.id}}"
- name: create-remediation
type: call
call: servicenow.create-incident
with:
short_description: "Access certification violations: {{campaign_name}}"
category: security
- name: notify-managers
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.security_team_id"
channel_id: "$secrets.access_review_channel_id"
text: "Access certification '{{campaign_name}}': {{get-violations.count}} violations. SNOW: {{create-remediation.number}}"
consumes:
- type: http
namespace: sailpoint
baseUri: "https://pwc.api.identitynow.com/v3"
authentication:
type: bearer
token: "$secrets.sailpoint_token"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: create-campaign
method: POST
- name: violations
path: "/campaigns/{{campaign_id}}/violations"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-violations
method: GET
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves Salesforce client account metrics and posts an account health digest to the engagement partner's Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Client Account Health Digest"
description: "Retrieves Salesforce client account metrics and posts an account health digest to the engagement partner's Microsoft Teams channel."
tags:
- sales
- crm
- salesforce
- reporting
- microsoft-teams
- client-management
capability:
exposes:
- type: mcp
namespace: client-reporting
port: 8080
tools:
- name: digest-client-health
description: "Given a Salesforce account ID and engagement partner's Teams UPN, fetch client account metrics and post a health digest to the partner's Teams channel."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the client."
- name: partner_teams_upn
in: body
type: string
description: "The Teams UPN of the engagement partner to notify."
steps:
- name: get-account
type: call
call: salesforce.get-account
with:
account_id: "{{account_id}}"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{partner_teams_upn}}"
text: "Client Health: {{get-account.Name}} | Revenue: ${{get-account.AnnualRevenue}} | Open Cases: {{get-account.OpenCasesCount}} | Last Activity: {{get-account.LastActivityDate}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.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: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries Salesforce for open client engagement opportunities by service line and posts a pipeline digest to the practice leadership Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Client Opportunity Pipeline Digest"
description: "Queries Salesforce for open client engagement opportunities by service line and posts a pipeline digest to the practice leadership Microsoft Teams channel."
tags:
- sales
- crm
- salesforce
- reporting
- microsoft-teams
- client-engagement
capability:
exposes:
- type: mcp
namespace: engagement-reporting
port: 8080
tools:
- name: digest-engagement-pipeline
description: "Given a PwC service line and Teams channel, query Salesforce for open client engagement opportunities and post a pipeline digest with deal counts and total value."
inputParameters:
- name: service_line
in: body
type: string
description: "The PwC service line to filter opportunities (e.g., 'Audit & Assurance', 'Tax', 'Advisory', 'Consulting')."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the practice leadership digest."
steps:
- name: query-opportunities
type: call
call: salesforce.query-records
with:
q: "SELECT Id,Name,StageName,Amount,CloseDate FROM Opportunity WHERE Service_Line__c = '{{service_line}}' AND IsClosed = false"
- name: post-digest
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Engagement Pipeline — {{service_line}}: {{query-opportunities.totalSize}} open opportunities | Total pipeline: ${{query-opportunities.total_amount}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.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-records
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves contact details from Salesforce by email address, returning the contact name, account, title, and phone number.
naftiko: "0.5"
info:
label: "Salesforce Contact Lookup"
description: "Retrieves contact details from Salesforce by email address, returning the contact name, account, title, and phone number."
tags:
- sales
- crm
- salesforce
capability:
exposes:
- type: mcp
namespace: crm-contacts
port: 8080
tools:
- name: get-contact-by-email
description: "Given an email address, look up the Salesforce contact and return name, account, title, and phone."
inputParameters:
- name: email
in: body
type: string
description: "Email address of the contact."
call: salesforce.query-contact
with:
email: "{{email}}"
outputParameters:
- name: name
type: string
mapping: "$.records[0].Name"
- name: account
type: string
mapping: "$.records[0].Account.Name"
- name: title
type: string
mapping: "$.records[0].Title"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/query?q=SELECT+Name,Account.Name,Title,Phone+FROM+Contact+WHERE+Email='{{email}}'"
inputParameters:
- name: email
in: query
operations:
- name: query-contact
method: GET
When a new Salesforce engagement opportunity is created, fetches the client company's LinkedIn organization data to enrich the account record with industry and employee count.
naftiko: "0.5"
info:
label: "Salesforce Engagement Opportunity Enrichment from LinkedIn"
description: "When a new Salesforce engagement opportunity is created, fetches the client company's LinkedIn organization data to enrich the account record with industry and employee count."
tags:
- sales
- crm
- salesforce
- linkedin
- lead-enrichment
- client-engagement
capability:
exposes:
- type: mcp
namespace: opportunity-enrichment
port: 8080
tools:
- name: enrich-opportunity-account
description: "Given a Salesforce opportunity ID and the client LinkedIn organization URN, fetch LinkedIn company data and update the Salesforce account with industry, employee count, and headquarters location."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID for the new client engagement."
- name: linkedin_org_urn
in: body
type: string
description: "The LinkedIn organization URN for the client company (e.g., 'urn:li:organization:12345')."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: get-linkedin-org
type: call
call: linkedin.get-organization
with:
org_urn: "{{linkedin_org_urn}}"
- name: update-account
type: call
call: salesforce.update-account
with:
account_id: "{{get-opportunity.AccountId}}"
industry: "{{get-linkedin-org.industries[0].localizedName}}"
number_of_employees: "{{get-linkedin-org.staffCount}}"
description: "{{get-linkedin-org.localizedDescription}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: organizations
path: "/organizations/{{org_urn}}"
inputParameters:
- name: org_urn
in: path
operations:
- name: get-organization
method: GET
Creates a new client account and primary contact in Salesforce, opens a ServiceNow client onboarding task, and notifies the engagement partner in Microsoft Teams.
naftiko: "0.5"
info:
label: "Salesforce New Client Onboarding"
description: "Creates a new client account and primary contact in Salesforce, opens a ServiceNow client onboarding task, and notifies the engagement partner in Microsoft Teams."
tags:
- sales
- crm
- salesforce
- servicenow
- onboarding
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: client-onboarding
port: 8080
tools:
- name: onboard-client
description: "Given client company name, primary contact details, service line, and engagement partner's Teams UPN, create a Salesforce account and contact, open a ServiceNow onboarding task, and notify the partner."
inputParameters:
- name: company_name
in: body
type: string
description: "The client's legal company name."
- name: contact_name
in: body
type: string
description: "Primary contact's full name at the client."
- name: contact_email
in: body
type: string
description: "Primary contact's business email address."
- name: service_line
in: body
type: string
description: "The PwC service line for this engagement (e.g., 'Audit & Assurance', 'Tax')."
- name: partner_teams_upn
in: body
type: string
description: "The Teams UPN of the engagement partner to notify."
steps:
- name: create-account
type: call
call: salesforce.create-account
with:
name: "{{company_name}}"
type: "Client"
service_line: "{{service_line}}"
- name: create-contact
type: call
call: salesforce.create-contact
with:
account_id: "{{create-account.id}}"
name: "{{contact_name}}"
email: "{{contact_email}}"
- name: open-onboarding-task
type: call
call: servicenow.create-incident
with:
short_description: "Client Onboarding: {{company_name}} — {{service_line}}"
category: "client_onboarding"
description: "Salesforce Account: {{create-account.id}}. Contact: {{contact_name}} ({{contact_email}})."
- name: notify-partner
type: call
call: msteams.send-message
with:
channel_id: "{{partner_teams_upn}}"
text: "New client onboarded: {{company_name}} ({{service_line}}). Salesforce: {{create-account.id}}. SNOW task: {{open-onboarding-task.number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://pwc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- name: contacts
path: "/sobjects/Contact"
operations:
- name: create-contact
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls pipeline data from Salesforce, queries Snowflake for historical trends, and posts forecast to leadership.
naftiko: "0.5"
info:
label: "Salesforce Pipeline Forecast Digest"
description: "Pulls pipeline data from Salesforce, queries Snowflake for historical trends, and posts forecast to leadership."
tags:
- sales
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: salesforce_pipeline_forecast_digest
description: "Pulls pipeline data from Salesforce, queries Snowflake for historical trends, and posts forecast to leadership."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Salesforce Pipeline Forecast Digest: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Salesforce Pipeline Forecast Digest for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves an expense report from SAP Concur by report ID, returning the total amount, status, and owner.
naftiko: "0.5"
info:
label: "SAP Concur Expense Lookup"
description: "Retrieves an expense report from SAP Concur by report ID, returning the total amount, status, and owner."
tags:
- finance
- expenses
- sap-concur
capability:
exposes:
- type: mcp
namespace: finance-expenses
port: 8080
tools:
- name: get-expense-report
description: "Given a Concur expense report ID, return the total, currency, status, and owner."
inputParameters:
- name: report_id
in: body
type: string
description: "Concur expense report ID."
call: concur.get-report
with:
report_id: "{{report_id}}"
outputParameters:
- name: total
type: string
mapping: "$.Total"
- name: currency
type: string
mapping: "$.CurrencyCode"
- name: status
type: string
mapping: "$.ApprovalStatusName"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
Retrieves a pending SAP Concur expense report, approves it, and notifies the submitter via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Approval"
description: "Retrieves a pending SAP Concur expense report, approves it, and notifies the submitter via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- approval
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: expense-approval
port: 8080
tools:
- name: approve-expense-report
description: "Given a SAP Concur report ID and approver comment, retrieve the report, approve it, and notify the submitter via Teams."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID to approve."
- name: approver_comment
in: body
type: string
description: "Approval comment to attach to the submission."
steps:
- name: get-report
type: call
call: concur.get-report
with:
report_id: "{{report_id}}"
- name: approve-report
type: call
call: concur.approve-report
with:
report_id: "{{report_id}}"
comment: "{{approver_comment}}"
- name: notify-submitter
type: call
call: msteams.send-message
with:
channel_id: "{{get-report.submitter_email}}"
text: "Your expense report '{{get-report.name}}' (${{get-report.total}}) has been approved in SAP Concur."
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
- name: approve-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Audits SAP Concur expense reports for missing receipts, creates compliance tickets, and notifies expense owners.
naftiko: "0.5"
info:
label: "SAP Concur Receipt Compliance Audit"
description: "Audits SAP Concur expense reports for missing receipts, creates compliance tickets, and notifies expense owners."
tags:
- finance
- compliance
- sap-concur
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: sap_concur_receipt_compliance_audit
description: "Audits SAP Concur expense reports for missing receipts, creates compliance tickets, and notifies expense owners."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "SAP Concur Receipt Compliance Audit: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "SAP Concur Receipt Compliance Audit for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Detects travel policy violations in SAP Concur, creates ServiceNow compliance tickets, and notifies managers.
naftiko: "0.5"
info:
label: "SAP Concur Travel Policy Violation Alert"
description: "Detects travel policy violations in SAP Concur, creates ServiceNow compliance tickets, and notifies managers."
tags:
- finance
- compliance
- sap-concur
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: sap_concur_travel_policy_violation_alert
description: "Detects travel policy violations in SAP Concur, creates ServiceNow compliance tickets, and notifies managers."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "SAP Concur Travel Policy Violation Alert: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "SAP Concur Travel Policy Violation Alert for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
When a critical security alert fires in Splunk, creates a ServiceNow incident, pages on-call via PagerDuty, and posts to the security Teams channel.
naftiko: "0.5"
info:
label: "Security Incident Escalation Workflow"
description: "When a critical security alert fires in Splunk, creates a ServiceNow incident, pages on-call via PagerDuty, and posts to the security Teams channel."
tags:
- security
- incident-response
- splunk
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-escalation
port: 8080
tools:
- name: escalate-security-incident
description: "Given a Splunk alert ID, create a ServiceNow incident, page on-call, and notify the security team."
inputParameters:
- name: alert_id
in: body
type: string
description: "Splunk alert ID."
- name: severity
in: body
type: string
description: "Incident severity."
steps:
- name: get-alert
type: call
call: splunk.get-alert
with:
alert_id: "{{alert_id}}"
- name: create-incident
type: call
call: servicenow.create-incident
with:
short_description: "Security Alert: {{get-alert.title}}"
category: security_incident
priority: "{{severity}}"
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
service_id: "$secrets.pagerduty_security_service_id"
title: "Security Alert: {{get-alert.title}}"
urgency: high
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.security_team_id"
channel_id: "$secrets.security_incidents_channel_id"
text: "SECURITY ALERT [{{severity}}]: {{get-alert.title}}. SNOW: {{create-incident.number}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.pwc.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: alerts
path: "/alerts/fired_alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Submits a ServiceNow change request for updates to PwC's audit or tax systems and notifies the change advisory board in Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Request for Audit System Updates"
description: "Submits a ServiceNow change request for updates to PwC's audit or tax systems and notifies the change advisory board in Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- audit
- approval
capability:
exposes:
- type: mcp
namespace: change-ops
port: 8080
tools:
- name: submit-audit-system-change
description: "Given a change description, affected audit or tax system, planned start, and CAB Teams channel, create a ServiceNow change request and notify the CAB."
inputParameters:
- name: change_description
in: body
type: string
description: "Full description of the system change, scope, and rollback plan."
- name: affected_system
in: body
type: string
description: "The PwC audit or tax system being changed (e.g., 'Aura Audit', 'PwC Tax Connect')."
- name: planned_start
in: body
type: string
description: "Planned change start datetime in ISO 8601 format."
- name: cab_channel_id
in: body
type: string
description: "Teams channel ID for the change advisory board notification."
steps:
- name: create-change
type: call
call: servicenow.create-change
with:
short_description: "Change: {{affected_system}} — {{change_description}}"
planned_start: "{{planned_start}}"
category: "audit_systems"
- name: notify-cab
type: call
call: msteams.send-message
with:
channel_id: "{{cab_channel_id}}"
text: "Change Request: {{affected_system}} | CHG: {{create-change.number}} | Planned: {{planned_start}} | Scope: {{change_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a configuration item from the ServiceNow CMDB by name, returning class, status, and owner.
naftiko: "0.5"
info:
label: "ServiceNow CMDB Asset Lookup"
description: "Retrieves a configuration item from the ServiceNow CMDB by name, returning class, status, and owner."
tags:
- it
- asset-management
- servicenow
capability:
exposes:
- type: mcp
namespace: it-cmdb
port: 8080
tools:
- name: get-ci
description: "Given a CI name, return its class, status, and owner from ServiceNow CMDB."
inputParameters:
- name: ci_name
in: body
type: string
description: "Configuration item name."
call: servicenow.get-ci
with:
name: "{{ci_name}}"
outputParameters:
- name: sys_class_name
type: string
mapping: "$.result[0].sys_class_name"
- name: operational_status
type: string
mapping: "$.result[0].operational_status"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci?sysparm_query=name={{name}}"
inputParameters:
- name: name
in: query
operations:
- name: get-ci
method: GET
Retrieves a ServiceNow incident by ticket number and returns its current state, priority, assignment group, and description.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by ticket number and returns its current state, priority, assignment group, and description."
tags:
- itsm
- servicenow
- lookup
capability:
exposes:
- type: mcp
namespace: itsm-lookup
port: 8080
tools:
- name: get-incident
description: "Given a ServiceNow incident number, return the incident's state, priority, assigned group, and short description."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., 'INC0067890')."
call: servicenow.get-incident
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_to
type: string
mapping: "$.result.assigned_to.display_value"
- name: short_description
type: string
mapping: "$.result.short_description"
consumes:
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
Coordinates major incident response by creating ServiceNow bridge, paging on-call via PagerDuty, and notifying leadership.
naftiko: "0.5"
info:
label: "ServiceNow Major Incident Management"
description: "Coordinates major incident response by creating ServiceNow bridge, paging on-call via PagerDuty, and notifying leadership."
tags:
- itsm
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: servicenow_major_incident_management
description: "Coordinates major incident response by creating ServiceNow bridge, paging on-call via PagerDuty, and notifying leadership."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "ServiceNow Major Incident Management: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "ServiceNow Major Incident Management for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Audits SharePoint document retention against policies, creates Jira remediation tasks, and notifies compliance.
naftiko: "0.5"
info:
label: "SharePoint Document Retention Compliance"
description: "Audits SharePoint document retention against policies, creates Jira remediation tasks, and notifies compliance."
tags:
- compliance
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: sharepoint_document_retention_compliance
description: "Audits SharePoint document retention against policies, creates Jira remediation tasks, and notifies compliance."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "SharePoint Document Retention Compliance: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "SharePoint Document Retention Compliance for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Searches for documents in SharePoint by keyword, returning matching file names, locations, and last modified dates.
naftiko: "0.5"
info:
label: "SharePoint Document Search"
description: "Searches for documents in SharePoint by keyword, returning matching file names, locations, and last modified dates."
tags:
- knowledge-management
- collaboration
- sharepoint
capability:
exposes:
- type: mcp
namespace: doc-search
port: 8080
tools:
- name: search-documents
description: "Search SharePoint for documents matching a keyword query."
inputParameters:
- name: search_term
in: body
type: string
description: "Keyword to search for."
call: sharepoint.search
with:
query: "{{search_term}}"
outputParameters:
- name: results
type: array
mapping: "$.value"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/search/query"
operations:
- name: search
method: POST
Monitors Snowflake data quality metrics, creates Jira tickets for anomalies, and notifies the data team.
naftiko: "0.5"
info:
label: "Snowflake Data Quality Monitoring"
description: "Monitors Snowflake data quality metrics, creates Jira tickets for anomalies, and notifies the data team."
tags:
- data-engineering
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: snowflake_data_quality_monitoring
description: "Monitors Snowflake data quality metrics, creates Jira tickets for anomalies, and notifies the data team."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Snowflake Data Quality Monitoring: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Snowflake Data Quality Monitoring for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Monitors Snowflake pipeline task health for PwC engagement analytics and alerts the data engineering team in Teams if failures are detected.
naftiko: "0.5"
info:
label: "Snowflake Engagement Analytics Pipeline Monitor"
description: "Monitors Snowflake pipeline task health for PwC engagement analytics and alerts the data engineering team in Teams if failures are detected."
tags:
- data
- analytics
- snowflake
- monitoring
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: analytics-ops
port: 8080
tools:
- name: monitor-analytics-pipelines
description: "Given a Snowflake database and schema for engagement analytics, check for task failures in the past 24 hours and post an alert to the data engineering Teams channel."
inputParameters:
- name: database
in: body
type: string
description: "The Snowflake database name for engagement analytics (e.g., 'ENGAGEMENT_ANALYTICS')."
- name: schema
in: body
type: string
description: "The Snowflake schema containing analytics pipeline tasks."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for data engineering alerts."
steps:
- name: check-task-failures
type: call
call: snowflake.query-task-history
with:
database: "{{database}}"
schema: "{{schema}}"
- name: post-alert
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "Analytics Pipeline Health ({{database}}.{{schema}}): {{check-task-failures.failed_count}} failures in 24h. Failed tasks: {{check-task-failures.failed_task_names}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/{{database}}/schemas/{{schema}}/tasks"
inputParameters:
- name: database
in: path
- name: schema
in: path
operations:
- name: query-task-history
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Executes a read-only SQL query against the Snowflake data warehouse and returns the result set for analytics.
naftiko: "0.5"
info:
label: "Snowflake Query Execution"
description: "Executes a read-only SQL query against the Snowflake data warehouse and returns the result set for analytics."
tags:
- data
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: data-queries
port: 8080
tools:
- name: run-query
description: "Execute a read-only SQL query on Snowflake and return the result set."
inputParameters:
- name: sql_statement
in: body
type: string
description: "SQL SELECT statement to execute."
- name: warehouse
in: body
type: string
description: "Snowflake warehouse to use."
call: snowflake.execute-query
with:
statement: "{{sql_statement}}"
warehouse: "{{warehouse}}"
outputParameters:
- name: row_count
type: integer
mapping: "$.resultSetMetaData.numRows"
- name: data
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Executes a Splunk search query and returns matching log events for incident investigation.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Executes a Splunk search query and returns matching log events for incident investigation."
tags:
- security
- observability
- splunk
capability:
exposes:
- type: mcp
namespace: security-logs
port: 8080
tools:
- name: search-logs
description: "Execute a Splunk search query over a specified time range."
inputParameters:
- name: search_query
in: body
type: string
description: "Splunk search query string."
- name: earliest_time
in: body
type: string
description: "Earliest time for search range."
call: splunk.create-search
with:
search: "{{search_query}}"
earliest_time: "{{earliest_time}}"
outputParameters:
- name: sid
type: string
mapping: "$.sid"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.pwc.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
Compiles sprint metrics from Jira, creates a Confluence retro page, and posts highlights to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Sprint Retrospective Digest Orchestration"
description: "Compiles sprint metrics from Jira, creates a Confluence retro page, and posts highlights to the engineering Teams channel."
tags:
- engineering
- agile
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: agile-retro
port: 8080
tools:
- name: generate-retro-digest
description: "Given a Jira sprint ID, compile metrics and create retro documentation."
inputParameters:
- name: sprint_id
in: body
type: string
description: "Jira sprint ID."
- name: board_id
in: body
type: string
description: "Jira board ID."
steps:
- name: get-sprint-report
type: call
call: jira.get-sprint-report
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: create-retro-page
type: call
call: confluence.create-page
with:
spaceKey: ENG
title: "Sprint {{sprint_id}} Retrospective"
body: "Completed: {{get-sprint-report.completedIssues.length}}, Incomplete: {{get-sprint-report.incompleteIssues.length}}"
- name: post-highlights
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.eng_team_id"
channel_id: "$secrets.eng_retro_channel_id"
text: "Sprint {{sprint_id}} retro: {{get-sprint-report.completedIssues.length}} completed. Report: {{create-retro-page.url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/agile/1.0"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: sprint-reports
path: "/board/{{board_id}}/sprint/{{sprint_id}}/report"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint-report
method: GET
- type: http
namespace: confluence
baseUri: "https://pwc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: content
path: "/content"
operations:
- name: create-page
method: POST
- 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 staff departure is processed in Workday, creates a ServiceNow offboarding ticket and notifies IT security in Microsoft Teams to revoke access.
naftiko: "0.5"
info:
label: "Staff Offboarding Workflow"
description: "When a staff departure is processed in Workday, creates a ServiceNow offboarding ticket and notifies IT security in Microsoft Teams to revoke access."
tags:
- hr
- offboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a Workday worker ID and last day date, create a ServiceNow offboarding task and alert IT security in Teams to begin access revocation for the departing staff member."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the departing staff member."
- name: last_day
in: body
type: string
description: "The staff member's last working date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
- name: create-offboard-ticket
type: call
call: servicenow.create-incident
with:
short_description: "Offboarding: {{get-employee.full_name}} — last day {{last_day}}"
category: "hr_offboarding"
assigned_group: "IT_Security"
- name: alert-it-security
type: call
call: msteams.send-message
with:
channel_id: "it-security-channel"
text: "Offboarding initiated: {{get-employee.full_name}} (last day: {{last_day}}). SNOW: {{create-offboard-ticket.number}}. Begin access revocation."
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: "/pwc/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a Tableau workbook refresh fails, creates a Jira ticket and notifies the BI team via Teams.
naftiko: "0.5"
info:
label: "Tableau Workbook Failure Alert"
description: "When a Tableau workbook refresh fails, creates a Jira ticket and notifies the BI team via Teams."
tags:
- reporting
- tableau
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: tableau_workbook_failure_alert
description: "When a Tableau workbook refresh fails, creates a Jira ticket and notifies the BI team via Teams."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Tableau Workbook Failure Alert: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Tableau Workbook Failure Alert for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Triggers a data extract refresh for a specified Tableau workbook to ensure current data.
naftiko: "0.5"
info:
label: "Tableau Workbook Refresh"
description: "Triggers a data extract refresh for a specified Tableau workbook to ensure current data."
tags:
- analytics
- reporting
- tableau
capability:
exposes:
- type: mcp
namespace: analytics-dashboards
port: 8080
tools:
- name: refresh-workbook
description: "Trigger a data extract refresh for a Tableau workbook by ID."
inputParameters:
- name: workbook_id
in: body
type: string
description: "Tableau workbook ID."
call: tableau.refresh-workbook
with:
workbook_id: "{{workbook_id}}"
outputParameters:
- name: job_id
type: string
mapping: "$.job.id"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.pwc.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/$secrets.tableau_site_id/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
Processes incoming tax documents by extracting data via AI, storing in Snowflake, creating a Jira review task, and notifying the tax team via Teams.
naftiko: "0.5"
info:
label: "Tax Document Processing Orchestration"
description: "Processes incoming tax documents by extracting data via AI, storing in Snowflake, creating a Jira review task, and notifying the tax team via Teams."
tags:
- tax
- document-processing
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tax-processing
port: 8080
tools:
- name: process-tax-document
description: "Given a document reference, extract tax data, store results, create review task, and notify team."
inputParameters:
- name: document_id
in: body
type: string
description: "Document ID in the document management system."
- name: client_name
in: body
type: string
description: "Client name for the tax engagement."
- name: tax_year
in: body
type: string
description: "Tax year."
steps:
- name: store-extraction
type: call
call: snowflake.execute-query
with:
statement: "INSERT INTO tax.document_extractions (document_id, client_name, tax_year, status) VALUES ('{{document_id}}', '{{client_name}}', '{{tax_year}}', 'pending_review')"
warehouse: "TAX_WH"
- name: create-review-task
type: call
call: jira.create-issue
with:
project: TAX
issuetype: Task
summary: "Review tax document: {{client_name}} - {{tax_year}}"
description: "Document ID: {{document_id}}"
- name: notify-team
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.tax_team_id"
channel_id: "$secrets.tax_processing_channel_id"
text: "Tax document for {{client_name}} ({{tax_year}}) ready for review. Jira: {{create-review-task.key}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: jira
baseUri: "https://pwc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Assesses vendor risk by pulling vendor data from SAP, checking compliance records in Snowflake, creating a risk assessment in ServiceNow, and notifying procurement.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Workflow"
description: "Assesses vendor risk by pulling vendor data from SAP, checking compliance records in Snowflake, creating a risk assessment in ServiceNow, and notifying procurement."
tags:
- procurement
- risk-management
- sap
- snowflake
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor-risk
description: "Given a SAP vendor number, run a risk assessment across compliance and procurement data."
inputParameters:
- name: vendor_number
in: body
type: string
description: "SAP vendor number."
steps:
- name: get-vendor
type: call
call: sap.get-vendor
with:
vendor_id: "{{vendor_number}}"
- name: check-compliance
type: call
call: snowflake.execute-query
with:
statement: "SELECT * FROM procurement.vendor_compliance WHERE vendor_id = '{{vendor_number}}'"
warehouse: "PROCUREMENT_WH"
- name: create-assessment
type: call
call: servicenow.create-request
with:
short_description: "Vendor risk assessment: {{get-vendor.SupplierName}}"
category: vendor_management
- name: notify-procurement
type: call
call: msteams.send-channel-message
with:
team_id: "$secrets.procurement_team_id"
channel_id: "$secrets.vendor_risk_channel_id"
text: "Vendor risk assessment for {{get-vendor.SupplierName}}: Compliance records={{check-compliance.row_count}}. ServiceNow: {{create-assessment.number}}"
consumes:
- type: http
namespace: sap
baseUri: "https://pwc-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: suppliers
path: "/A_Supplier('{{vendor_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries Workday for incomplete benefits enrollments and sends reminders via Teams.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Reminder"
description: "Queries Workday for incomplete benefits enrollments and sends reminders via Teams."
tags:
- hr
- benefits
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: workday_benefits_enrollment_reminder
description: "Queries Workday for incomplete benefits enrollments and sends reminders via Teams."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Workday Benefits Enrollment Reminder: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Workday Benefits Enrollment Reminder for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves the compensation grade and pay range for a given Workday job profile to support offer generation and compensation planning.
naftiko: "0.5"
info:
label: "Workday Compensation Grade Lookup"
description: "Retrieves the compensation grade and pay range for a given Workday job profile to support offer generation and compensation planning."
tags:
- hr
- compensation
- workday
- lookup
capability:
exposes:
- type: mcp
namespace: hr-comp
port: 8080
tools:
- name: get-compensation-grade
description: "Given a Workday job profile ID, return the compensation grade, pay range minimum and maximum, and currency for use in offer generation or compensation benchmarking."
inputParameters:
- name: job_profile_id
in: body
type: string
description: "The Workday job profile ID to retrieve compensation data for."
call: workday.get-comp-grade
with:
job_profile_id: "{{job_profile_id}}"
outputParameters:
- name: grade
type: string
mapping: "$.compensationGrade.descriptor"
- name: pay_min
type: string
mapping: "$.compensationGradeProfile.minimumSalary"
- name: pay_max
type: string
mapping: "$.compensationGradeProfile.maximumSalary"
- name: currency
type: string
mapping: "$.compensationGradeProfile.currency"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation-grades
path: "/pwc/compensationGrades/{{job_profile_id}}"
inputParameters:
- name: job_profile_id
in: path
operations:
- name: get-comp-grade
method: GET
Retrieves compensation details for an employee from Workday including base salary, bonus target, and pay grade.
naftiko: "0.5"
info:
label: "Workday Compensation Lookup"
description: "Retrieves compensation details for an employee from Workday including base salary, bonus target, and pay grade."
tags:
- hr
- compensation
- workday
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: get-compensation
description: "Given a Workday employee ID, return base salary, bonus target, and pay grade."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: workday.get-compensation
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: base_salary
type: string
mapping: "$.compensation.baseSalary"
- name: bonus_target
type: string
mapping: "$.compensation.bonusTarget"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/workers/{{worker_id}}/compensation"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-compensation
method: GET
Pulls diversity metrics from Workday, refreshes Power BI dashboard, and posts report to HR leadership.
naftiko: "0.5"
info:
label: "Workday Diversity Metrics Report"
description: "Pulls diversity metrics from Workday, refreshes Power BI dashboard, and posts report to HR leadership."
tags:
- hr
- diversity
- workday
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: workday_diversity_metrics_report
description: "Pulls diversity metrics from Workday, refreshes Power BI dashboard, and posts report to HR leadership."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Workday Diversity Metrics Report: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Workday Diversity Metrics Report for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Retrieves an employee's profile from Workday by worker ID, including name, department, title, and manager.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee's profile from Workday by worker ID, including name, department, title, and manager."
tags:
- hr
- workforce
- workday
capability:
exposes:
- type: mcp
namespace: hr-profiles
port: 8080
tools:
- name: get-employee-profile
description: "Given a Workday worker ID, return the employee's full name, department, title, and manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
call: workday.get-worker
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.fullName"
- name: department
type: string
mapping: "$.department"
- name: title
type: string
mapping: "$.jobTitle"
- name: manager
type: string
mapping: "$.manager.displayName"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Exports current active headcount from Workday by service line and posts a snapshot with average billing rates to the PwC finance leadership Teams channel.
naftiko: "0.5"
info:
label: "Workday Headcount and Billing Rate Snapshot"
description: "Exports current active headcount from Workday by service line and posts a snapshot with average billing rates to the PwC finance leadership Teams channel."
tags:
- hr
- finance
- workday
- reporting
- microsoft-teams
- workforce-planning
capability:
exposes:
- type: mcp
namespace: hr-finance-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Retrieve current headcount and billing rate data from Workday by service line and post a summary to the finance leadership Teams channel."
inputParameters:
- name: as_of_date
in: body
type: string
description: "The snapshot date in YYYY-MM-DD format."
- name: teams_channel_id
in: body
type: string
description: "Teams channel ID for the finance leadership snapshot."
steps:
- name: export-workers
type: call
call: workday.list-workers
with:
status: "active"
as_of_date: "{{as_of_date}}"
- name: post-snapshot
type: call
call: msteams.send-message
with:
channel_id: "{{teams_channel_id}}"
text: "PwC Headcount Snapshot ({{as_of_date}}): {{export-workers.total}} active staff across {{export-workers.service_line_count}} service lines."
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: "/pwc/workers"
inputParameters:
- name: status
in: query
- name: as_of_date
in: query
operations:
- name: list-workers
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT.
naftiko: "0.5"
info:
label: "Workday New Hire IT Provisioning"
description: "When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT."
tags:
- hr
- workday
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: workday_new_hire_it_provisioning
description: "When a new hire is confirmed in Workday, creates Okta account, provisions access, and notifies IT."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Workday New Hire IT Provisioning: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Workday New Hire IT Provisioning for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Detects payroll discrepancies between Workday and Snowflake, creates Jira investigation tickets, and notifies payroll.
naftiko: "0.5"
info:
label: "Workday Payroll Discrepancy Investigation"
description: "Detects payroll discrepancies between Workday and Snowflake, creates Jira investigation tickets, and notifies payroll."
tags:
- hr
- payroll
- workday
- snowflake
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pwc-ops
port: 8080
tools:
- name: workday_payroll_discrepancy_investigation
description: "Detects payroll discrepancies between Workday and Snowflake, creates Jira investigation tickets, and notifies payroll."
inputParameters:
- name: entity_id
type: string
description: "Primary entity identifier."
- name: context
type: string
description: "Additional context."
steps:
- name: gather-data
type: call
call: snowflake.run-query
with:
entity_id: "{{entity_id}}"
context: "{{context}}"
- name: create-action
type: call
call: servicenow.create-incident
with:
short_description: "Workday Payroll Discrepancy Investigation: {{entity_id}}"
description: "Data: {{gather-data.results}}"
- name: notify-team
type: call
call: msteams.post-channel-message
with:
channel_id: "$secrets.teams_ops_channel"
text: "Workday Payroll Discrepancy Investigation for {{entity_id}} | Action: {{create-action.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://pwc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: sql-statements
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow
baseUri: "https://pwc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ops/channels/{{channel_id}}/messages"
operations:
- name: post-channel-message
method: POST
Initiates a performance review cycle in Workday for a PwC service line and notifies all people managers in Microsoft Teams to begin annual evaluations.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Launch"
description: "Initiates a performance review cycle in Workday for a PwC service line and notifies all people managers in Microsoft Teams to begin annual evaluations."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: launch-review-cycle
description: "Given a service line code and review period, initiate the Workday performance review cycle and send a Teams notification to all people managers."
inputParameters:
- name: service_line
in: body
type: string
description: "The PwC service line code for the review cycle (e.g., 'ASSURANCE', 'TAX', 'ADVISORY')."
- name: review_period
in: body
type: string
description: "The review period label (e.g., 'Annual-2025')."
- name: due_date
in: body
type: string
description: "Review completion deadline in YYYY-MM-DD format."
- name: manager_channel_id
in: body
type: string
description: "Teams channel ID for the manager notification."
steps:
- name: create-cycle
type: call
call: workday.create-review-cycle
with:
service_line: "{{service_line}}"
review_period: "{{review_period}}"
due_date: "{{due_date}}"
- name: notify-managers
type: call
call: msteams.send-message
with:
channel_id: "{{manager_channel_id}}"
text: "Performance Review Cycle '{{review_period}}' launched for {{service_line}}. Complete all Workday evaluations by {{due_date}}. Cycle ID: {{create-cycle.cycle_id}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: review-cycles
path: "/pwc/performanceReviews"
operations:
- name: create-review-cycle
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msteams_token"
resources:
- name: messages
path: "/teams/{{channel_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current time off balance for an employee from Workday including vacation, sick, and personal days.
naftiko: "0.5"
info:
label: "Workday Time Off Balance Lookup"
description: "Retrieves the current time off balance for an employee from Workday including vacation, sick, and personal days."
tags:
- hr
- time-off
- workday
capability:
exposes:
- type: mcp
namespace: hr-timeoff
port: 8080
tools:
- name: get-time-off-balance
description: "Given a Workday employee ID, return remaining time off balances."
inputParameters:
- name: employee_id
in: body
type: string
description: "Workday employee ID."
call: workday.get-timeoff-balance
with:
worker_id: "{{employee_id}}"
outputParameters:
- name: vacation_balance
type: number
mapping: "$.timeOffBalances[0].balance"
- name: sick_balance
type: number
mapping: "$.timeOffBalances[1].balance"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: timeoff
path: "/workers/{{worker_id}}/timeOffBalances"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-timeoff-balance
method: GET