EY Capabilities
Naftiko 0.5 capability definitions for EY - 100 capabilities showing integration workflows and service orchestrations.
Reviews access at EY via Okta, IAM, and Jira.
naftiko: "0.5"
info:
label: "Access Review Pipeline"
description: "Reviews access at EY via Okta, IAM, and Jira."
tags:
- security
- access-management
- okta
- compliance
capability:
exposes:
- type: mcp
namespace: access-rev
port: 8080
tools:
- name: review
description: "Review access at EY."
inputParameters:
- name: dept
in: body
type: string
description: "Department."
steps:
- name: ent
type: call
call: "okta.get-users"
with:
dept: "{{dept}}"
- name: compare
type: call
call: "iam.compare"
with:
data: "{{ent.data}}"
- name: flag
type: call
call: "iam.flag"
with:
violations: "{{compare.violations}}"
- name: fix
type: call
call: "jira.create-issue"
with:
project: "IAM"
summary: "Violations in {{dept}}"
consumes:
- type: http
namespace: okta
baseUri: "https://ey.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-users
method: GET
- type: http
namespace: iam
baseUri: "https://iam.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.iam_token"
resources:
- name: reviews
path: "/compare"
operations:
- name: compare
method: POST
- type: http
namespace: jira
baseUri: "https://ey.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Extracts payroll summary data from ADP for a specified pay period and employer. Used by EY tax teams to reconcile payroll tax liabilities.
naftiko: "0.5"
info:
label: "ADP Payroll Data Extraction for Tax"
description: "Extracts payroll summary data from ADP for a specified pay period and employer. Used by EY tax teams to reconcile payroll tax liabilities."
tags:
- tax
- payroll
- adp
- reconciliation
capability:
exposes:
- type: mcp
namespace: payroll-tax
port: 8080
tools:
- name: get-payroll-summary
description: "Retrieve ADP payroll summary by employer and pay period."
inputParameters:
- name: employer_id
in: body
type: string
description: "The ADP employer ID."
- name: pay_period
in: body
type: string
description: "The pay period end date in YYYY-MM-DD format."
call: "adp.get-payroll-summary"
with:
employer_id: "{{employer_id}}"
pay_period: "{{pay_period}}"
outputParameters:
- name: gross_pay
type: string
mapping: "$.payrollSummary.grossPay.amount"
- name: total_taxes
type: string
mapping: "$.payrollSummary.totalTaxes.amount"
- name: net_pay
type: string
mapping: "$.payrollSummary.netPay.amount"
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com/payroll/v1"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll-summaries
path: "/employers/{{employer_id}}/pay-statements?payPeriodEndDate={{pay_period}}"
inputParameters:
- name: employer_id
in: path
- name: pay_period
in: query
operations:
- name: get-payroll-summary
method: GET
Triggers an Alteryx Server workflow for client data transformation and notifies the advisory team via Slack with the job ID and status.
naftiko: "0.5"
info:
label: "Alteryx Workflow Execution"
description: "Triggers an Alteryx Server workflow for client data transformation and notifies the advisory team via Slack with the job ID and status."
tags:
- advisory
- data
- alteryx
- automation
- slack
capability:
exposes:
- type: mcp
namespace: data-workflows
port: 8080
tools:
- name: run-alteryx-workflow
description: "Execute an Alteryx Server workflow and notify the team via Slack."
inputParameters:
- name: workflow_id
in: body
type: string
description: "The Alteryx Server workflow ID."
- name: slack_channel
in: body
type: string
description: "Slack channel for job notifications."
steps:
- name: execute-workflow
type: call
call: "alteryx.run-workflow"
with:
workflow_id: "{{workflow_id}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Alteryx workflow {{workflow_id}} submitted. Job ID: {{execute-workflow.job_id}}. Status: {{execute-workflow.status}}."
consumes:
- type: http
namespace: alteryx
baseUri: "https://ey-alteryx.gallery.alteryx.com/api/v3"
authentication:
type: bearer
token: "$secrets.alteryx_token"
resources:
- name: workflows
path: "/workflows/{{workflow_id}}/jobs"
inputParameters:
- name: workflow_id
in: path
operations:
- name: run-workflow
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Uploads finalized audit workpapers to an Amazon S3 bucket for long-term archival, following EY document retention policies.
naftiko: "0.5"
info:
label: "Amazon S3 Audit Archive Upload"
description: "Uploads finalized audit workpapers to an Amazon S3 bucket for long-term archival, following EY document retention policies."
tags:
- audit
- archive
- amazon-s3
- document-management
capability:
exposes:
- type: mcp
namespace: audit-archive
port: 8080
tools:
- name: archive-to-s3
description: "Upload a finalized audit document to an S3 archive bucket."
inputParameters:
- name: bucket_name
in: body
type: string
description: "The S3 bucket name."
- name: object_key
in: body
type: string
description: "The S3 object key (file path)."
- name: file_content
in: body
type: string
description: "Base64-encoded file content."
call: "s3.put-object"
with:
bucket: "{{bucket_name}}"
key: "{{object_key}}"
body: "{{file_content}}"
outputParameters:
- name: etag
type: string
mapping: "$.ETag"
- name: version_id
type: string
mapping: "$.VersionId"
consumes:
- type: http
namespace: s3
baseUri: "https://{{bucket}}.s3.amazonaws.com"
authentication:
type: awsSigV4
accessKeyId: "$secrets.aws_access_key_id"
secretAccessKey: "$secrets.aws_secret_access_key"
region: "us-east-1"
resources:
- name: objects
path: "/{{key}}"
inputParameters:
- name: key
in: path
operations:
- name: put-object
method: PUT
Manages API deprecation at EY via consumer identification, notices, and tracking.
naftiko: "0.5"
info:
label: "API Deprecation Pipeline"
description: "Manages API deprecation at EY via consumer identification, notices, and tracking."
tags:
- api-management
- communications
- governance
capability:
exposes:
- type: mcp
namespace: api-sunset
port: 8080
tools:
- name: notify-sunset
description: "Manage API sunset at EY."
inputParameters:
- name: api
in: body
type: string
description: "API name."
- name: date
in: body
type: string
description: "Sunset date."
steps:
- name: consumers
type: call
call: "api-gw.consumers"
with:
api: "{{api}}"
- name: notify
type: call
call: "email.batch"
with:
to: "{{consumers.emails}}"
subject: "{{api}} sunset: {{date}}"
- name: track
type: call
call: "analytics.usage"
with:
api: "{{api}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "API"
summary: "Sunset {{api}} by {{date}}"
consumes:
- type: http
namespace: api-gw
baseUri: "https://api-gw.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.api_gw_token"
resources:
- name: consumers
path: "/apis/{{api}}/consumers"
inputParameters:
- name: api
in: path
operations:
- name: consumers
method: GET
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: analytics
baseUri: "https://analytics.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: usage
path: "/api-usage"
operations:
- name: usage
method: GET
- type: http
namespace: jira
baseUri: "https://ey.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Creates a case in Appian for tracking a regulatory inquiry, links it to the client's Salesforce account, and notifies the case owner via Slack.
naftiko: "0.5"
info:
label: "Appian Case Management Workflow"
description: "Creates a case in Appian for tracking a regulatory inquiry, links it to the client's Salesforce account, and notifies the case owner via Slack."
tags:
- advisory
- compliance
- appian
- salesforce
- slack
capability:
exposes:
- type: mcp
namespace: case-management
port: 8080
tools:
- name: create-regulatory-case
description: "Create an Appian case for a regulatory inquiry, link to Salesforce, and notify via Slack."
inputParameters:
- name: case_title
in: body
type: string
description: "Title for the regulatory case."
- name: client_account_id
in: body
type: string
description: "The Salesforce account ID for the client."
- name: case_owner_email
in: body
type: string
description: "Email of the case owner."
- name: slack_channel
in: body
type: string
description: "Slack channel for case notifications."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{client_account_id}}"
- name: create-case
type: call
call: "appian.create-record"
with:
record_type: "regulatory_case"
title: "{{case_title}}"
client_name: "{{get-client.Name}}"
owner: "{{case_owner_email}}"
- name: notify-owner
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "New regulatory case created: {{case_title}} for {{get-client.Name}}. Case ID: {{create-case.record_id}}. Owner: {{case_owner_email}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://ey.my.salesforce.com/services/data/v59.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: appian
baseUri: "https://ey-appian.appiancloud.com/suite/webapi"
authentication:
type: bearer
token: "$secrets.appian_token"
resources:
- name: records
path: "/records"
operations:
- name: create-record
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
On new audit engagement creation in ServiceNow, provisions a SharePoint document library, creates a Microsoft Teams channel for the engagement team, and sends calendar invites via Outlook for the planning meeting.
naftiko: "0.5"
info:
label: "Audit Engagement Kickoff Orchestrator"
description: "On new audit engagement creation in ServiceNow, provisions a SharePoint document library, creates a Microsoft Teams channel for the engagement team, and sends calendar invites via Outlook for the planning meeting."
tags:
- audit
- engagement
- servicenow
- sharepoint
- microsoft-teams
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: audit-engagement
port: 8080
tools:
- name: kickoff-audit-engagement
description: "Given an engagement ID and client name, orchestrate the full audit kickoff sequence across ServiceNow, SharePoint, Microsoft Teams, and Outlook."
inputParameters:
- name: engagement_id
in: body
type: string
description: "The ServiceNow engagement record ID."
- name: client_name
in: body
type: string
description: "The client entity name for the audit engagement."
- name: engagement_partner
in: body
type: string
description: "Email of the engagement partner leading the audit."
- name: planning_date
in: body
type: string
description: "The planning meeting date in YYYY-MM-DD format."
steps:
- name: get-engagement
type: call
call: "servicenow.get-engagement"
with:
engagement_id: "{{engagement_id}}"
- name: create-doc-library
type: call
call: "sharepoint.create-folder"
with:
site_id: "ey_audit_engagements"
folder_path: "Engagements/{{client_name}}_{{engagement_id}}"
- name: create-team-channel
type: call
call: "msteams.create-channel"
with:
team_id: "ey-audit-team"
display_name: "{{client_name}} - {{engagement_id}}"
description: "Audit engagement channel for {{client_name}}"
- name: send-planning-invite
type: call
call: "outlook.create-event"
with:
organizer: "{{engagement_partner}}"
subject: "Audit Planning Meeting - {{client_name}}"
start_date: "{{planning_date}}"
body: "Kickoff planning for engagement {{engagement_id}}. Documents: {{create-doc-library.url}}. Channel: {{create-team-channel.url}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://ey.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: engagements
path: "/table/x_ey_engagement/{{engagement_id}}"
inputParameters:
- name: engagement_id
in: path
operations:
- name: get-engagement
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels"
inputParameters:
- name: team_id
in: path
operations:
- name: create-channel
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: events
path: "/users/{{organizer}}/events"
inputParameters:
- name: organizer
in: path
operations:
- name: create-event
method: POST
Retrieves the applicable tax rate from Avalara for a given jurisdiction and transaction type. Used by EY indirect tax teams to validate client tax calculations.
naftiko: "0.5"
info:
label: "Avalara Tax Rate Lookup"
description: "Retrieves the applicable tax rate from Avalara for a given jurisdiction and transaction type. Used by EY indirect tax teams to validate client tax calculations."
tags:
- tax
- indirect-tax
- avalara
- compliance
capability:
exposes:
- type: mcp
namespace: tax-rates
port: 8080
tools:
- name: get-tax-rate
description: "Look up the Avalara tax rate by jurisdiction and tax type."
inputParameters:
- name: jurisdiction
in: body
type: string
description: "The tax jurisdiction (e.g., US-CA)."
- name: tax_type
in: body
type: string
description: "The tax type (e.g., SalesTax, UseTax)."
call: "avalara.get-rate"
with:
jurisdiction: "{{jurisdiction}}"
tax_type: "{{tax_type}}"
outputParameters:
- name: rate
type: string
mapping: "$.totalRate"
- name: effective_date
type: string
mapping: "$.effectiveDate"
consumes:
- type: http
namespace: avalara
baseUri: "https://rest.avatax.com/api/v2"
authentication:
type: basic
username: "$secrets.avalara_user"
password: "$secrets.avalara_password"
resources:
- name: tax-rates
path: "/taxrates/byaddress?country=US®ion={{jurisdiction}}&taxType={{tax_type}}"
inputParameters:
- name: jurisdiction
in: query
- name: tax_type
in: query
operations:
- name: get-rate
method: GET
Checks whether a user is a member of a specified Azure Active Directory security group. Used for access control validation during IT audit engagements.
naftiko: "0.5"
info:
label: "Azure Active Directory Group Membership Check"
description: "Checks whether a user is a member of a specified Azure Active Directory security group. Used for access control validation during IT audit engagements."
tags:
- audit
- security
- azure-active-directory
- identity
capability:
exposes:
- type: mcp
namespace: identity-audit
port: 8080
tools:
- name: check-group-membership
description: "Check if a user is a member of an Azure AD security group."
inputParameters:
- name: user_upn
in: body
type: string
description: "The user principal name (email)."
- name: group_id
in: body
type: string
description: "The Azure AD group object ID."
call: "azuread.check-member"
with:
user_upn: "{{user_upn}}"
group_id: "{{group_id}}"
outputParameters:
- name: is_member
type: string
mapping: "$.value"
consumes:
- type: http
namespace: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: group-members
path: "/groups/{{group_id}}/members?$filter=userPrincipalName eq '{{user_upn}}'"
inputParameters:
- name: group_id
in: path
- name: user_upn
in: query
operations:
- name: check-member
method: GET
Checks build at EY.
naftiko: "0.5"
info:
label: "Azure DevOps Build Check"
description: "Checks build at EY."
tags:
- devops
- azure-devops
- ci-cd
capability:
exposes:
- type: mcp
namespace: azdo-build
port: 8080
tools:
- name: check-build
description: "Check build at EY."
inputParameters:
- name: project
in: body
type: string
description: "Project."
- name: build_id
in: body
type: string
description: "Build ID."
call: "azdo.get-build"
with:
project: "{{project}}"
build_id: "{{build_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/ey.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds/{{build_id}}"
inputParameters:
- name: project
in: path
- name: build_id
in: path
operations:
- name: get-build
method: GET
Triggers an Azure DevOps build pipeline for EY internal tools and posts the build result to the development Slack channel.
naftiko: "0.5"
info:
label: "Azure DevOps Build Pipeline Trigger"
description: "Triggers an Azure DevOps build pipeline for EY internal tools and posts the build result to the development Slack channel."
tags:
- development
- ci-cd
- azure-devops
- slack
capability:
exposes:
- type: mcp
namespace: devops-builds
port: 8080
tools:
- name: trigger-build-pipeline
description: "Trigger an Azure DevOps build pipeline and notify Slack with the result."
inputParameters:
- name: organization
in: body
type: string
description: "The Azure DevOps organization name."
- name: project
in: body
type: string
description: "The Azure DevOps project name."
- name: pipeline_id
in: body
type: string
description: "The pipeline definition ID."
- name: slack_channel
in: body
type: string
description: "Slack channel for build notifications."
steps:
- name: queue-build
type: call
call: "azuredevops.queue-build"
with:
organization: "{{organization}}"
project: "{{project}}"
definition_id: "{{pipeline_id}}"
- name: notify-slack
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Build #{{queue-build.build_number}} queued for pipeline {{pipeline_id}} in {{project}}. Status: {{queue-build.status}}."
consumes:
- type: http
namespace: azuredevops
baseUri: "https://dev.azure.com"
authentication:
type: basic
username: "$secrets.azuredevops_user"
password: "$secrets.azuredevops_pat"
resources:
- name: builds
path: "/{{organization}}/{{project}}/_apis/build/builds?api-version=7.0"
inputParameters:
- name: organization
in: path
- name: project
in: path
operations:
- name: queue-build
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves a secret value from Azure Key Vault by secret name. Used by EY platform engineering teams to manage credentials for engagement infrastructure.
naftiko: "0.5"
info:
label: "Azure Key Vault Secret Retrieval"
description: "Retrieves a secret value from Azure Key Vault by secret name. Used by EY platform engineering teams to manage credentials for engagement infrastructure."
tags:
- security
- azure-key-vault
- infrastructure
- secrets-management
capability:
exposes:
- type: mcp
namespace: vault-secrets
port: 8080
tools:
- name: get-vault-secret
description: "Retrieve a secret from Azure Key Vault by name."
inputParameters:
- name: vault_name
in: body
type: string
description: "The Azure Key Vault name."
- name: secret_name
in: body
type: string
description: "The secret name to retrieve."
call: "keyvault.get-secret"
with:
vault_name: "{{vault_name}}"
secret_name: "{{secret_name}}"
outputParameters:
- name: value
type: string
mapping: "$.value"
- name: content_type
type: string
mapping: "$.contentType"
consumes:
- type: http
namespace: keyvault
baseUri: "https://{{vault_name}}.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: secrets
path: "/secrets/{{secret_name}}?api-version=7.4"
inputParameters:
- name: secret_name
in: path
operations:
- name: get-secret
method: GET
Verifies backups at EY.
naftiko: "0.5"
info:
label: "Backup Verification Pipeline"
description: "Verifies backups at EY."
tags:
- database
- backup
- operations
capability:
exposes:
- type: mcp
namespace: backup-verify
port: 8080
tools:
- name: verify-backups
description: "Verify backups at EY."
inputParameters:
- name: db
in: body
type: string
description: "Database."
- name: date
in: body
type: string
description: "Backup date."
steps:
- name: status
type: call
call: "backup.get-status"
with:
db: "{{db}}"
date: "{{date}}"
- name: verify
type: call
call: "backup.verify"
with:
id: "{{status.backup_id}}"
- name: log
type: call
call: "snowflake.query"
with:
query: "INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#dba"
text: "Backup {{db}}: {{verify.status}}"
consumes:
- type: http
namespace: backup
baseUri: "https://backup.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.backup_token"
resources:
- name: backups
path: "/databases/{{db}}/status"
inputParameters:
- name: db
in: path
operations:
- name: get-status
method: GET
- type: http
namespace: snowflake
baseUri: "https://ey.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Downloads a specific audit evidence file from Box and logs the retrieval in the engagement Confluence space for chain of custody documentation.
naftiko: "0.5"
info:
label: "Box Audit Evidence Retrieval"
description: "Downloads a specific audit evidence file from Box and logs the retrieval in the engagement Confluence space for chain of custody documentation."
tags:
- audit
- document-management
- box
- confluence
capability:
exposes:
- type: mcp
namespace: evidence-retrieval
port: 8080
tools:
- name: get-box-file
description: "Retrieve an audit evidence file from Box and log the access in Confluence."
inputParameters:
- name: file_id
in: body
type: string
description: "The Box file ID."
- name: confluence_page_id
in: body
type: string
description: "The Confluence page ID for evidence tracking."
steps:
- name: fetch-file
type: call
call: "box.get-file"
with:
file_id: "{{file_id}}"
- name: log-retrieval
type: call
call: "confluence.add-comment"
with:
page_id: "{{confluence_page_id}}"
body: "Evidence retrieved: {{fetch-file.file_name}} (Box ID: {{file_id}}). Last modified: {{fetch-file.modified_date}}. Download: {{fetch-file.download_url}}"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
- type: http
namespace: confluence
baseUri: "https://ey-collab.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: comments
path: "/content/{{page_id}}/child/comment"
inputParameters:
- name: page_id
in: path
operations:
- name: add-comment
method: POST
Analyzes budget variance at EY via Oracle, Workday, and Slack.
naftiko: "0.5"
info:
label: "Budget Variance Pipeline"
description: "Analyzes budget variance at EY via Oracle, Workday, and Slack."
tags:
- finance
- budget
- oracle
- workday
capability:
exposes:
- type: mcp
namespace: budget-var
port: 8080
tools:
- name: analyze-variance
description: "Check budget variance at EY."
inputParameters:
- name: cc
in: body
type: string
description: "Cost center."
- name: period
in: body
type: string
description: "Period."
steps:
- name: actuals
type: call
call: "oracle.get-actuals"
with:
cc: "{{cc}}"
period: "{{period}}"
- name: budget
type: call
call: "workday.get-budget"
with:
cc: "{{cc}}"
- name: compute
type: call
call: "analytics.variance"
with:
a: "{{actuals.total}}"
b: "{{budget.total}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#finance"
text: "Variance {{cc}}: ${{compute.variance}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: fin
path: "/actuals"
operations:
- name: get-actuals
method: GET
- type: http
namespace: workday
baseUri: "https://wd5.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: budgets
path: "/budgets"
operations:
- name: get-budget
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: var
path: "/compute"
operations:
- name: variance
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Plans capacity at EY by collecting utilization and forecasting.
naftiko: "0.5"
info:
label: "Capacity Planning Pipeline"
description: "Plans capacity at EY by collecting utilization and forecasting."
tags:
- infrastructure
- capacity-planning
- forecasting
capability:
exposes:
- type: mcp
namespace: capacity
port: 8080
tools:
- name: plan-capacity
description: "Plan capacity at EY."
inputParameters:
- name: resource
in: body
type: string
description: "Resource type."
- name: months
in: body
type: number
description: "Forecast months."
steps:
- name: util
type: call
call: "monitoring.get-util"
with:
resource: "{{resource}}"
- name: forecast
type: call
call: "analytics.forecast"
with:
current: "{{util.pct}}"
months: "{{months}}"
- name: procure
type: call
call: "servicenow.create-request"
with:
type: "capacity"
resource: "{{resource}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "capacity"
consumes:
- type: http
namespace: monitoring
baseUri: "https://monitoring.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: util
path: "/resources/{{resource}}/util"
inputParameters:
- name: resource
in: path
operations:
- name: get-util
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: forecast
path: "/demand"
operations:
- name: forecast
method: POST
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Monitors cert expiry at EY.
naftiko: "0.5"
info:
label: "Certificate Expiry Pipeline"
description: "Monitors cert expiry at EY."
tags:
- security
- certificates
- monitoring
capability:
exposes:
- type: mcp
namespace: cert-monitor
port: 8080
tools:
- name: check-certs
description: "Monitor certs at EY."
inputParameters:
- name: domains
in: body
type: string
description: "Domains to check."
steps:
- name: scan
type: call
call: "cert-scanner.scan"
with:
domains: "{{domains}}"
- name: filter
type: call
call: "analytics.filter-expiring"
with:
certs: "{{scan.results}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "{{filter.count}} certs expiring"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#security"
text: "Cert alert: {{filter.count}} expiring"
consumes:
- type: http
namespace: cert-scanner
baseUri: "https://certs.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.cert_token"
resources:
- name: scans
path: "/scan"
operations:
- name: scan
method: POST
- type: http
namespace: jira
baseUri: "https://ey.com.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Routes changes at EY through ServiceNow and CAB approval.
naftiko: "0.5"
info:
label: "Change Management Pipeline"
description: "Routes changes at EY through ServiceNow and CAB approval."
tags:
- change-management
- servicenow
- itil
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: process-change
description: "Process changes at EY."
inputParameters:
- name: change_id
in: body
type: string
description: "Change ID."
- name: date
in: body
type: string
description: "Date."
steps:
- name: get
type: call
call: "servicenow.get-change"
with:
id: "{{change_id}}"
- name: conflicts
type: call
call: "servicenow.check-conflicts"
with:
date: "{{date}}"
- name: submit
type: call
call: "servicenow.update"
with:
id: "{{change_id}}"
state: "approval"
- name: notify
type: call
call: "email.send"
with:
to: "cab@co.com"
subject: "CAB: {{change_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: changes
path: "/table/change_request/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-change
method: GET
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Creates a Google Forms survey for post-engagement client feedback and sends the form link to the client contact via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Client Feedback Survey via Google Forms"
description: "Creates a Google Forms survey for post-engagement client feedback and sends the form link to the client contact via Microsoft Outlook."
tags:
- client-engagement
- google-forms
- microsoft-outlook
- feedback
capability:
exposes:
- type: mcp
namespace: client-feedback
port: 8080
tools:
- name: send-feedback-survey
description: "Create a Google Forms feedback survey and send the link to the client contact."
inputParameters:
- name: form_template_id
in: body
type: string
description: "The Google Forms template ID."
- name: client_email
in: body
type: string
description: "The client contact email."
- name: engagement_name
in: body
type: string
description: "The engagement name for context."
steps:
- name: create-form
type: call
call: "googleforms.create-form"
with:
template_id: "{{form_template_id}}"
title: "EY Engagement Feedback - {{engagement_name}}"
- name: send-email
type: call
call: "outlook.send-mail"
with:
to: "{{client_email}}"
subject: "We value your feedback - {{engagement_name}}"
body: "Thank you for working with EY. Please share your feedback: {{create-form.responder_uri}}"
consumes:
- type: http
namespace: googleforms
baseUri: "https://forms.googleapis.com/v1"
authentication:
type: bearer
token: "$secrets.google_forms_token"
resources:
- name: forms
path: "/forms"
operations:
- name: create-form
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Pulls client financial data from Bloomberg, retrieves engagement history from Salesforce, generates a risk score summary, and posts findings to the engagement Confluence space.
naftiko: "0.5"
info:
label: "Client Risk Assessment Pipeline"
description: "Pulls client financial data from Bloomberg, retrieves engagement history from Salesforce, generates a risk score summary, and posts findings to the engagement Confluence space."
tags:
- advisory
- risk-management
- bloomberg
- salesforce
- confluence
capability:
exposes:
- type: mcp
namespace: risk-assessment
port: 8080
tools:
- name: assess-client-risk
description: "Given a Bloomberg ticker and Salesforce account ID, compile client financial indicators and engagement history into a risk summary posted to Confluence."
inputParameters:
- name: ticker
in: body
type: string
description: "Bloomberg ticker symbol for the client entity."
- name: account_id
in: body
type: string
description: "Salesforce account ID for the client."
- name: confluence_space
in: body
type: string
description: "Confluence space key for the engagement."
steps:
- name: get-financials
type: call
call: "bloomberg.get-company-data"
with:
ticker: "{{ticker}}"
- name: get-engagement-history
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: publish-assessment
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space}}"
title: "Risk Assessment - {{get-financials.company_name}}"
body: "Revenue: {{get-financials.revenue}}. Debt-to-equity: {{get-financials.debt_equity_ratio}}. Last engagement: {{get-engagement-history.last_engagement_date}}. Engagement count: {{get-engagement-history.opportunity_count}}."
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: company-data
path: "/catalogs/bbg/fields?identifier={{ticker}}"
inputParameters:
- name: ticker
in: query
operations:
- name: get-company-data
method: GET
- type: http
namespace: salesforce
baseUri: "https://ey.my.salesforce.com/services/data/v59.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: confluence
baseUri: "https://ey-collab.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
Optimizes cloud costs at EY via Azure, FinOps, Jira, and Power BI.
naftiko: "0.5"
info:
label: "Cloud Cost Optimization Pipeline"
description: "Optimizes cloud costs at EY via Azure, FinOps, Jira, and Power BI."
tags:
- cloud
- cost-management
- finops
capability:
exposes:
- type: mcp
namespace: cloud-opt
port: 8080
tools:
- name: optimize
description: "Optimize cloud costs at EY."
inputParameters:
- name: provider
in: body
type: string
description: "Provider."
- name: range
in: body
type: string
description: "Range."
steps:
- name: spend
type: call
call: "cloud.get-costs"
with:
provider: "{{provider}}"
range: "{{range}}"
- name: savings
type: call
call: "finops.analyze"
with:
data: "{{spend.data}}"
- name: action
type: call
call: "jira.create-issue"
with:
project: "FINOPS"
summary: "Save ${{savings.potential}}"
- name: report
type: call
call: "power-bi.refresh"
with:
dataset: "cloud"
consumes:
- type: http
namespace: cloud
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: costs
path: "/providers/Microsoft.CostManagement/query"
operations:
- name: get-costs
method: POST
- type: http
namespace: finops
baseUri: "https://finops.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.finops_token"
resources:
- name: analysis
path: "/savings"
operations:
- name: analyze
method: POST
- type: http
namespace: jira
baseUri: "https://ey.com.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: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Searches Confluence at EY.
naftiko: "0.5"
info:
label: "Confluence Article Search"
description: "Searches Confluence at EY."
tags:
- knowledge-management
- confluence
- documentation
capability:
exposes:
- type: mcp
namespace: confluence-search
port: 8080
tools:
- name: search-articles
description: "Search Confluence at EY."
inputParameters:
- name: query
in: body
type: string
description: "Query."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: title
type: string
mapping: "$.results[0].title"
consumes:
- type: http
namespace: confluence
baseUri: "https://ey.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
operations:
- name: search
method: GET
Creates a new knowledge article in Confluence from audit methodology updates, then notifies the relevant Microsoft Teams channel with a link to the published page.
naftiko: "0.5"
info:
label: "Confluence Knowledge Article Publisher"
description: "Creates a new knowledge article in Confluence from audit methodology updates, then notifies the relevant Microsoft Teams channel with a link to the published page."
tags:
- knowledge-management
- confluence
- microsoft-teams
- audit
capability:
exposes:
- type: mcp
namespace: km-publish
port: 8080
tools:
- name: publish-knowledge-article
description: "Create a Confluence page with the given title and body content, then notify the specified Teams channel."
inputParameters:
- name: space_key
in: body
type: string
description: "The Confluence space key."
- name: title
in: body
type: string
description: "The page title."
- name: body_content
in: body
type: string
description: "The page body in Confluence storage format."
- name: teams_channel_webhook
in: body
type: string
description: "The Microsoft Teams incoming webhook URL."
steps:
- name: create-page
type: call
call: "confluence.create-page"
with:
space_key: "{{space_key}}"
title: "{{title}}"
body: "{{body_content}}"
- name: notify-teams
type: call
call: "msteams.send-webhook"
with:
webhook_url: "{{teams_channel_webhook}}"
text: "New knowledge article published: [{{title}}]({{create-page.url}})"
consumes:
- type: http
namespace: confluence
baseUri: "https://ey-collab.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: webhooks
path: "/{{webhook_url}}"
inputParameters:
- name: webhook_url
in: path
operations:
- name: send-webhook
method: POST
Tracks contract renewals at EY via contracts system, email, Jira, and Salesforce.
naftiko: "0.5"
info:
label: "Contract Renewal Pipeline"
description: "Tracks contract renewals at EY via contracts system, email, Jira, and Salesforce."
tags:
- procurement
- contracts
- salesforce
- jira
capability:
exposes:
- type: mcp
namespace: contract-renew
port: 8080
tools:
- name: track
description: "Track renewals at EY."
inputParameters:
- name: contract_id
in: body
type: string
description: "Contract ID."
- name: owner
in: body
type: string
description: "Owner email."
steps:
- name: get
type: call
call: "contracts.get"
with:
id: "{{contract_id}}"
- name: remind
type: call
call: "email.send"
with:
to: "{{owner}}"
subject: "Renewal: {{contract_id}}"
- name: task
type: call
call: "jira.create-issue"
with:
project: "PROC"
summary: "Renew {{contract_id}}"
- name: crm
type: call
call: "salesforce.update"
with:
id: "{{contract_id}}"
stage: "Renewal"
consumes:
- type: http
namespace: contracts
baseUri: "https://contracts.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.contracts_token"
resources:
- name: contracts
path: "/contracts/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
- type: http
namespace: jira
baseUri: "https://ey.com.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: salesforce
baseUri: "https://ey.com.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opps
path: "/sobjects/Opportunity"
operations:
- name: update
method: PATCH
Reallocates costs at EY.
naftiko: "0.5"
info:
label: "Cost Reallocation Pipeline"
description: "Reallocates costs at EY."
tags:
- finance
- cost-allocation
- oracle
capability:
exposes:
- type: mcp
namespace: cost-realloc
port: 8080
tools:
- name: reallocate
description: "Reallocate costs at EY."
inputParameters:
- name: source
in: body
type: string
description: "Source CC."
- name: target
in: body
type: string
description: "Target CC."
- name: amount
in: body
type: number
description: "Amount."
steps:
- name: current
type: call
call: "oracle.get-alloc"
with:
cc: "{{source}}"
- name: compute
type: call
call: "analytics.realloc"
with:
source: "{{source}}"
target: "{{target}}"
amount: "{{amount}}"
- name: post
type: call
call: "oracle.post-journal"
with:
entries: "{{compute.entries}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#finance"
text: "Reallocated ${{amount}} from {{source}} to {{target}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: allocations
path: "/cost-centers/{{cc}}/allocations"
inputParameters:
- name: cc
in: path
operations:
- name: get-alloc
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: realloc
path: "/compute"
operations:
- name: realloc
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves a pending invoice from Coupa, validates against the SAP purchase order, and routes for approval via Microsoft Power Automate.
naftiko: "0.5"
info:
label: "Coupa Invoice Processing Workflow"
description: "Retrieves a pending invoice from Coupa, validates against the SAP purchase order, and routes for approval via Microsoft Power Automate."
tags:
- finance
- procurement
- coupa
- sap
- microsoft-power-automate
capability:
exposes:
- type: mcp
namespace: invoice-processing
port: 8080
tools:
- name: process-invoice
description: "Validate a Coupa invoice against SAP PO data and trigger approval workflow."
inputParameters:
- name: invoice_id
in: body
type: string
description: "The Coupa invoice ID."
- name: po_number
in: body
type: string
description: "The SAP purchase order number."
- name: flow_url
in: body
type: string
description: "The Power Automate flow trigger URL."
steps:
- name: get-invoice
type: call
call: "coupa.get-invoice"
with:
invoice_id: "{{invoice_id}}"
- name: get-po
type: call
call: "sap.get-po"
with:
po_number: "{{po_number}}"
- name: trigger-approval
type: call
call: "powerautomate.trigger-flow"
with:
flow_url: "{{flow_url}}"
invoice_amount: "{{get-invoice.total}}"
po_amount: "{{get-po.total_value}}"
vendor: "{{get-invoice.supplier_name}}"
consumes:
- type: http
namespace: coupa
baseUri: "https://ey-client.coupahost.com/api"
authentication:
type: bearer
token: "$secrets.coupa_token"
resources:
- name: invoices
path: "/invoices/{{invoice_id}}"
inputParameters:
- name: invoice_id
in: path
operations:
- name: get-invoice
method: GET
- type: http
namespace: sap
baseUri: "https://ey-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: powerautomate
baseUri: "https://prod-00.westus.logic.azure.com"
authentication:
type: none
resources:
- name: flows
path: "/{{flow_url}}"
inputParameters:
- name: flow_url
in: path
operations:
- name: trigger-flow
method: POST
Monitors data pipelines at EY via Databricks, Snowflake, Slack, and ServiceNow.
naftiko: "0.5"
info:
label: "Data Pipeline Monitor Pipeline"
description: "Monitors data pipelines at EY via Databricks, Snowflake, Slack, and ServiceNow."
tags:
- data-engineering
- databricks
- monitoring
- slack
capability:
exposes:
- type: mcp
namespace: pipeline-mon
port: 8080
tools:
- name: monitor
description: "Monitor pipelines at EY."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "Pipeline ID."
steps:
- name: status
type: call
call: "databricks.get-run"
with:
id: "{{pipeline_id}}"
- name: quality
type: call
call: "snowflake.query"
with:
query: "SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#data"
text: "Pipeline {{pipeline_id}}: {{status.state}}"
- name: incident
type: call
call: "servicenow.create-incident"
with:
desc: "Pipeline {{pipeline_id}} issue"
consumes:
- type: http
namespace: databricks
baseUri: "https://ey.com.cloud.databricks.com/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/runs/get"
operations:
- name: get-run
method: GET
- type: http
namespace: snowflake
baseUri: "https://ey.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Runs a Databricks notebook to perform audit analytics on client data and posts the run URL to the engagement Slack channel.
naftiko: "0.5"
info:
label: "Databricks Notebook Execution for Audit Analytics"
description: "Runs a Databricks notebook to perform audit analytics on client data and posts the run URL to the engagement Slack channel."
tags:
- audit
- analytics
- databricks
- slack
capability:
exposes:
- type: mcp
namespace: audit-analytics
port: 8080
tools:
- name: run-audit-notebook
description: "Execute a Databricks notebook for audit analytics and notify the team via Slack."
inputParameters:
- name: notebook_path
in: body
type: string
description: "The Databricks notebook path."
- name: cluster_id
in: body
type: string
description: "The Databricks cluster ID."
- name: slack_channel
in: body
type: string
description: "Slack channel for notification."
steps:
- name: submit-run
type: call
call: "databricks.submit-run"
with:
notebook_path: "{{notebook_path}}"
cluster_id: "{{cluster_id}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Audit analytics notebook submitted. Run ID: {{submit-run.run_id}}. Track at: {{submit-run.run_page_url}}"
consumes:
- type: http
namespace: databricks
baseUri: "https://ey-workspace.cloud.databricks.com/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs-runs
path: "/jobs/runs/submit"
operations:
- name: submit-run
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves the current health status of monitored infrastructure from Datadog and posts an alert to Slack if the host is down. Used by EY technology consulting teams.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Monitoring Check"
description: "Retrieves the current health status of monitored infrastructure from Datadog and posts an alert to Slack if the host is down. Used by EY technology consulting teams."
tags:
- consulting
- monitoring
- datadog
- infrastructure
- slack
capability:
exposes:
- type: mcp
namespace: infra-monitoring
port: 8080
tools:
- name: get-host-status
description: "Check a Datadog host status and alert the Slack channel if the host is unhealthy."
inputParameters:
- name: hostname
in: body
type: string
description: "The hostname to check in Datadog."
- name: slack_channel
in: body
type: string
description: "Slack channel for infrastructure alerts."
steps:
- name: check-host
type: call
call: "datadog.get-host"
with:
hostname: "{{hostname}}"
- name: alert-slack
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Host {{hostname}} status: {{check-host.status}}. Apps: {{check-host.apps}}. Last reported: {{check-host.last_reported}}."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: "DD-API-KEY"
in: header
value: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: hosts
path: "/hosts?filter={{hostname}}"
inputParameters:
- name: hostname
in: query
operations:
- name: get-host
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks Datadog monitor at EY.
naftiko: "0.5"
info:
label: "Datadog Monitor Check"
description: "Checks Datadog monitor at EY."
tags:
- monitoring
- datadog
- observability
capability:
exposes:
- type: mcp
namespace: dd-monitor
port: 8080
tools:
- name: check-monitor
description: "Check monitor at EY."
inputParameters:
- name: monitor_id
in: body
type: string
description: "Monitor ID."
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: status
type: string
mapping: "$.overall_state"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
Sends an engagement letter via DocuSign for client signature and logs the envelope status in ServiceNow.
naftiko: "0.5"
info:
label: "DocuSign Engagement Letter Sender"
description: "Sends an engagement letter via DocuSign for client signature and logs the envelope status in ServiceNow."
tags:
- client-engagement
- docusign
- servicenow
- legal
capability:
exposes:
- type: mcp
namespace: engagement-letters
port: 8080
tools:
- name: send-engagement-letter
description: "Send an engagement letter for electronic signature via DocuSign and log to ServiceNow."
inputParameters:
- name: template_id
in: body
type: string
description: "The DocuSign template ID for the engagement letter."
- name: signer_email
in: body
type: string
description: "The client signer email address."
- name: signer_name
in: body
type: string
description: "The client signer full name."
- name: engagement_id
in: body
type: string
description: "The ServiceNow engagement record ID."
steps:
- name: send-envelope
type: call
call: "docusign.create-envelope"
with:
template_id: "{{template_id}}"
signer_email: "{{signer_email}}"
signer_name: "{{signer_name}}"
- name: log-to-servicenow
type: call
call: "servicenow.update-engagement"
with:
engagement_id: "{{engagement_id}}"
docusign_envelope_id: "{{send-envelope.envelope_id}}"
letter_status: "sent"
consumes:
- type: http
namespace: docusign
baseUri: "https://na4.docusign.net/restapi/v2.1"
authentication:
type: bearer
token: "$secrets.docusign_token"
resources:
- name: envelopes
path: "/accounts/$secrets.docusign_account_id/envelopes"
operations:
- name: create-envelope
method: POST
- type: http
namespace: servicenow
baseUri: "https://ey.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: engagements
path: "/table/x_ey_engagement/{{engagement_id}}"
inputParameters:
- name: engagement_id
in: path
operations:
- name: update-engagement
method: PATCH
Tests disaster recovery at EY via failover, health checks, and reporting.
naftiko: "0.5"
info:
label: "DR Test Pipeline"
description: "Tests disaster recovery at EY via failover, health checks, and reporting."
tags:
- disaster-recovery
- business-continuity
- testing
capability:
exposes:
- type: mcp
namespace: dr-test
port: 8080
tools:
- name: test-dr
description: "Test DR at EY."
inputParameters:
- name: plan_id
in: body
type: string
description: "Plan ID."
- name: type
in: body
type: string
description: "Test type."
steps:
- name: failover
type: call
call: "dr.failover"
with:
plan: "{{plan_id}}"
type: "{{type}}"
- name: validate
type: call
call: "monitoring.check"
with:
scope: "critical"
- name: measure
type: call
call: "dr.metrics"
with:
id: "{{failover.id}}"
- name: report
type: call
call: "confluence.create-page"
with:
title: "DR - {{plan_id}}"
body: "RTO:{{measure.rto}}m RPO:{{measure.rpo}}m"
consumes:
- type: http
namespace: dr
baseUri: "https://dr.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.dr_token"
resources:
- name: failovers
path: "/failovers"
operations:
- name: failover
method: POST
- type: http
namespace: monitoring
baseUri: "https://monitoring.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: health
path: "/checks"
operations:
- name: check
method: POST
- type: http
namespace: confluence
baseUri: "https://ey.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Detects infrastructure drift at EY via Terraform, Slack, and Jira.
naftiko: "0.5"
info:
label: "Drift Detection Pipeline"
description: "Detects infrastructure drift at EY via Terraform, Slack, and Jira."
tags:
- infrastructure
- terraform
- drift-detection
- devops
capability:
exposes:
- type: mcp
namespace: drift-det
port: 8080
tools:
- name: detect
description: "Detect drift at EY."
inputParameters:
- name: ws_id
in: body
type: string
description: "Workspace ID."
- name: env
in: body
type: string
description: "Environment."
steps:
- name: plan
type: call
call: "terraform.run"
with:
ws: "{{ws_id}}"
- name: check
type: call
call: "terraform.get-plan"
with:
run: "{{plan.id}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#infra"
text: "Drift {{env}}: {{check.changes}} changes"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "INFRA"
summary: "Drift in {{env}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: run
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: jira
baseUri: "https://ey.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Checks ES index at EY.
naftiko: "0.5"
info:
label: "ES Index Health"
description: "Checks ES index at EY."
tags:
- search
- elasticsearch
- infrastructure
capability:
exposes:
- type: mcp
namespace: es-health
port: 8080
tools:
- name: check-index
description: "Check ES index at EY."
inputParameters:
- name: index
in: body
type: string
description: "Index name."
call: "es.get-health"
with:
index: "{{index}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: docs
type: number
mapping: "$.docs.count"
consumes:
- type: http
namespace: es
baseUri: "https://es.ey.com:9200"
authentication:
type: bearer
token: "$secrets.es_token"
resources:
- name: indices
path: "/{{index}}/_stats"
inputParameters:
- name: index
in: path
operations:
- name: get-health
method: GET
Offboards employees at EY via Okta, Slack, ServiceNow, and storage.
naftiko: "0.5"
info:
label: "Employee Offboarding Pipeline"
description: "Offboards employees at EY via Okta, Slack, ServiceNow, and storage."
tags:
- hr
- offboarding
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: offboarding
port: 8080
tools:
- name: offboard
description: "Offboard employees at EY."
inputParameters:
- name: emp_id
in: body
type: string
description: "Employee ID."
- name: last_day
in: body
type: string
description: "Last day."
steps:
- name: disable
type: call
call: "okta.deactivate"
with:
user: "{{emp_id}}"
- name: revoke
type: call
call: "slack.remove"
with:
user: "{{emp_id}}"
- name: return
type: call
call: "servicenow.create-request"
with:
type: "return"
emp: "{{emp_id}}"
- name: archive
type: call
call: "storage.archive"
with:
user: "{{emp_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://ey.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{user}}/lifecycle/deactivate"
inputParameters:
- name: user
in: path
operations:
- name: deactivate
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: users
path: "/users.admin.remove"
operations:
- name: remove
method: POST
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: storage
baseUri: "https://storage.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.storage_token"
resources:
- name: archives
path: "/archive"
operations:
- name: archive
method: POST
Audits expenses at EY via Concur, compliance checks, and email.
naftiko: "0.5"
info:
label: "Expense Audit Pipeline"
description: "Audits expenses at EY via Concur, compliance checks, and email."
tags:
- finance
- travel
- sap-concur
- compliance
capability:
exposes:
- type: mcp
namespace: expense-audit
port: 8080
tools:
- name: audit
description: "Audit expenses at EY."
inputParameters:
- name: report_id
in: body
type: string
description: "Report ID."
steps:
- name: get
type: call
call: "concur.get-report"
with:
id: "{{report_id}}"
- name: check
type: call
call: "compliance.check"
with:
expenses: "{{get.entries}}"
- name: flag
type: call
call: "workflow.flag"
with:
id: "{{report_id}}"
violations: "{{check.violations}}"
- name: notify
type: call
call: "email.send"
with:
to: "{{get.approver}}"
subject: "Expense {{report_id}} violations"
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/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-report
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: policies
path: "/check"
operations:
- name: check
method: POST
- type: http
namespace: workflow
baseUri: "https://workflow.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.workflow_token"
resources:
- name: reviews
path: "/flag"
operations:
- name: flag
method: POST
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Retrieves financial fundamentals from FactSet for a client entity. Used by EY valuation and advisory teams for comparable company analysis.
naftiko: "0.5"
info:
label: "FactSet Financial Data Retrieval"
description: "Retrieves financial fundamentals from FactSet for a client entity. Used by EY valuation and advisory teams for comparable company analysis."
tags:
- advisory
- valuation
- factset
- financial-analysis
capability:
exposes:
- type: mcp
namespace: financial-data
port: 8080
tools:
- name: get-factset-financials
description: "Retrieve financial fundamentals from FactSet by entity identifier."
inputParameters:
- name: entity_id
in: body
type: string
description: "The FactSet entity identifier."
- name: metrics
in: body
type: string
description: "Comma-separated list of financial metrics (e.g., revenue,ebitda,net_income)."
call: "factset.get-fundamentals"
with:
ids: "{{entity_id}}"
metrics: "{{metrics}}"
outputParameters:
- name: data
type: string
mapping: "$.data"
consumes:
- type: http
namespace: factset
baseUri: "https://api.factset.com/content/factset-fundamentals/v2"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_api_key"
resources:
- name: fundamentals
path: "/fundamentals?ids={{ids}}&metrics={{metrics}}"
inputParameters:
- name: ids
in: query
- name: metrics
in: query
operations:
- name: get-fundamentals
method: GET
Analyzes feedback at EY via surveys, AI sentiment, and Power BI.
naftiko: "0.5"
info:
label: "Customer Feedback Pipeline"
description: "Analyzes feedback at EY via surveys, AI sentiment, and Power BI."
tags:
- customer-experience
- analytics
- sentiment-analysis
capability:
exposes:
- type: mcp
namespace: feedback
port: 8080
tools:
- name: analyze
description: "Analyze feedback at EY."
inputParameters:
- name: survey_id
in: body
type: string
description: "Survey ID."
steps:
- name: collect
type: call
call: "survey.get"
with:
id: "{{survey_id}}"
- name: sentiment
type: call
call: "ai.analyze"
with:
text: "{{collect.responses}}"
- name: themes
type: call
call: "ai.themes"
with:
data: "{{collect.responses}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "cx"
consumes:
- type: http
namespace: survey
baseUri: "https://surveys.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.survey_token"
resources:
- name: responses
path: "/surveys/{{id}}/responses"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: ai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: completions
path: "/chat/completions"
operations:
- name: analyze
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Checks GitHub repo at EY.
naftiko: "0.5"
info:
label: "GitHub Repo Check"
description: "Checks GitHub repo at EY."
tags:
- devops
- github
- version-control
capability:
exposes:
- type: mcp
namespace: gh-repo
port: 8080
tools:
- name: get-branch
description: "Check branch at EY."
inputParameters:
- name: repo
in: body
type: string
description: "Repo."
- name: branch
in: body
type: string
description: "Branch."
call: "github.get-branch"
with:
repo: "{{repo}}"
branch: "{{branch}}"
outputParameters:
- name: sha
type: string
mapping: "$.commit.sha"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branches
path: "/repos/org/{{repo}}/branches/{{branch}}"
inputParameters:
- name: repo
in: path
- name: branch
in: path
operations:
- name: get-branch
method: GET
Retrieves call analytics from Gong for a specific engagement opportunity. Used by EY business development teams to review client interaction insights and improve win rates.
naftiko: "0.5"
info:
label: "Gong Sales Call Intelligence Lookup"
description: "Retrieves call analytics from Gong for a specific engagement opportunity. Used by EY business development teams to review client interaction insights and improve win rates."
tags:
- business-development
- gong
- sales
- analytics
capability:
exposes:
- type: mcp
namespace: call-intelligence
port: 8080
tools:
- name: get-call-analytics
description: "Retrieve Gong call analytics for a specific call ID."
inputParameters:
- name: call_id
in: body
type: string
description: "The Gong call ID."
call: "gong.get-call"
with:
call_id: "{{call_id}}"
outputParameters:
- name: duration
type: string
mapping: "$.call.duration"
- name: talk_ratio
type: string
mapping: "$.call.talkRatio"
- name: topics
type: string
mapping: "$.call.topics"
- name: action_items
type: string
mapping: "$.call.actionItems"
consumes:
- type: http
namespace: gong
baseUri: "https://api.gong.io/v2"
authentication:
type: bearer
token: "$secrets.gong_token"
resources:
- name: calls
path: "/calls/{{call_id}}/transcript"
inputParameters:
- name: call_id
in: path
operations:
- name: get-call
method: GET
Retrieves website traffic metrics from Google Analytics for a client property. Used by EY digital consulting teams to benchmark client web performance.
naftiko: "0.5"
info:
label: "Google Analytics Client Website Metrics"
description: "Retrieves website traffic metrics from Google Analytics for a client property. Used by EY digital consulting teams to benchmark client web performance."
tags:
- consulting
- analytics
- google-analytics
- digital
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-website-metrics
description: "Retrieve Google Analytics metrics for a client property by date range."
inputParameters:
- name: property_id
in: body
type: string
description: "The Google Analytics property ID."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "ga.run-report"
with:
property_id: "{{property_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: sessions
type: string
mapping: "$.rows[0].metricValues[0].value"
- name: users
type: string
mapping: "$.rows[0].metricValues[1].value"
- name: bounce_rate
type: string
mapping: "$.rows[0].metricValues[2].value"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
Checks Grafana dashboard at EY.
naftiko: "0.5"
info:
label: "Grafana Dashboard Status"
description: "Checks Grafana dashboard at EY."
tags:
- monitoring
- grafana
- dashboards
capability:
exposes:
- type: mcp
namespace: grafana
port: 8080
tools:
- name: check-dash
description: "Check dashboard at EY."
inputParameters:
- name: uid
in: body
type: string
description: "Dashboard UID."
call: "grafana.get-dash"
with:
uid: "{{uid}}"
outputParameters:
- name: title
type: string
mapping: "$.dashboard.title"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.ey.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{uid}}"
inputParameters:
- name: uid
in: path
operations:
- name: get-dash
method: GET
When a new lead is captured in HubSpot, syncs the contact to Salesforce as a lead record and notifies the business development team via Microsoft Teams.
naftiko: "0.5"
info:
label: "HubSpot Lead Capture to Salesforce Sync"
description: "When a new lead is captured in HubSpot, syncs the contact to Salesforce as a lead record and notifies the business development team via Microsoft Teams."
tags:
- business-development
- hubspot
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lead-sync
port: 8080
tools:
- name: sync-lead-to-salesforce
description: "Sync a HubSpot contact to Salesforce as a lead and notify the BD team."
inputParameters:
- name: hubspot_contact_id
in: body
type: string
description: "The HubSpot contact ID."
- name: teams_channel_id
in: body
type: string
description: "The Microsoft Teams channel ID for notifications."
steps:
- name: get-hubspot-contact
type: call
call: "hubspot.get-contact"
with:
contact_id: "{{hubspot_contact_id}}"
- name: create-sf-lead
type: call
call: "salesforce.create-lead"
with:
first_name: "{{get-hubspot-contact.firstname}}"
last_name: "{{get-hubspot-contact.lastname}}"
email: "{{get-hubspot-contact.email}}"
company: "{{get-hubspot-contact.company}}"
- name: notify-bd-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "ey-business-development"
channel_id: "{{teams_channel_id}}"
text: "New lead synced: {{get-hubspot-contact.firstname}} {{get-hubspot-contact.lastname}} from {{get-hubspot-contact.company}}. Salesforce Lead ID: {{create-sf-lead.id}}."
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: salesforce
baseUri: "https://ey.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead"
operations:
- name: create-lead
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Triggers an Informatica Cloud data quality job for client data validation during audit engagements and posts the run status to the audit Slack channel.
naftiko: "0.5"
info:
label: "Informatica Data Quality Job Runner"
description: "Triggers an Informatica Cloud data quality job for client data validation during audit engagements and posts the run status to the audit Slack channel."
tags:
- audit
- data-quality
- informatica
- automation
- slack
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: run-data-quality-job
description: "Execute an Informatica Cloud data quality task and notify the team via Slack."
inputParameters:
- name: task_id
in: body
type: string
description: "The Informatica Cloud task ID."
- name: slack_channel
in: body
type: string
description: "Slack channel for job status notifications."
steps:
- name: start-job
type: call
call: "informatica.start-job"
with:
task_id: "{{task_id}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Informatica data quality job started. Task: {{task_id}}. Run ID: {{start-job.run_id}}. Status: {{start-job.status}}."
consumes:
- type: http
namespace: informatica
baseUri: "https://na1.dm-us.informaticacloud.com/saas/api/v2"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: jobs
path: "/job"
operations:
- name: start-job
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Escalates IT incidents at EY via ServiceNow, PagerDuty, and Slack.
naftiko: "0.5"
info:
label: "IT Incident Escalation Pipeline"
description: "Escalates IT incidents at EY via ServiceNow, PagerDuty, and Slack."
tags:
- incident-management
- servicenow
- pagerduty
- slack
capability:
exposes:
- type: mcp
namespace: incident-escalation
port: 8080
tools:
- name: escalate-incident
description: "Escalate incidents at EY."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
- name: severity
in: body
type: string
description: "Severity."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_id: "{{incident_id}}"
- name: page
type: call
call: "pagerduty.create-incident"
with:
title: "{{get-incident.description}}"
urgency: "{{severity}}"
- name: channel
type: call
call: "slack.create-channel"
with:
name: "inc-{{incident_id}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#inc-{{incident_id}}"
text: "P{{severity}}: {{get-incident.description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
- 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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: channels
path: "/conversations.create"
operations:
- name: create-channel
method: POST
Creates a Jira issue for a new audit or advisory task, assigns it to the specified team member, and links the issue to the engagement Confluence page.
naftiko: "0.5"
info:
label: "Jira Engagement Task Creator"
description: "Creates a Jira issue for a new audit or advisory task, assigns it to the specified team member, and links the issue to the engagement Confluence page."
tags:
- project-management
- jira
- confluence
- engagement
capability:
exposes:
- type: mcp
namespace: task-management
port: 8080
tools:
- name: create-engagement-task
description: "Create a Jira issue for an engagement task, assign it, and link to the Confluence engagement page."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key."
- name: summary
in: body
type: string
description: "The task summary."
- name: assignee_email
in: body
type: string
description: "Email of the assignee."
- name: confluence_page_id
in: body
type: string
description: "The Confluence page ID to link."
steps:
- name: create-issue
type: call
call: "jira.create-issue"
with:
project_key: "{{project_key}}"
summary: "{{summary}}"
assignee: "{{assignee_email}}"
issue_type: "Task"
- name: add-confluence-link
type: call
call: "jira.add-remote-link"
with:
issue_key: "{{create-issue.key}}"
url: "https://ey-collab.atlassian.net/wiki/pages/viewpage.action?pageId={{confluence_page_id}}"
title: "Engagement Documentation"
consumes:
- type: http
namespace: jira
baseUri: "https://ey-collab.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
- name: remote-links
path: "/issue/{{issue_key}}/remotelink"
inputParameters:
- name: issue_key
in: path
operations:
- name: add-remote-link
method: POST
Retrieves sprint progress at EY.
naftiko: "0.5"
info:
label: "Jira Sprint Progress Lookup"
description: "Retrieves sprint progress at EY."
tags:
- project-management
- jira
- agile
capability:
exposes:
- type: mcp
namespace: jira-sprint
port: 8080
tools:
- name: get-sprint
description: "Look up sprint at EY."
inputParameters:
- name: project_key
in: body
type: string
description: "Project key."
call: "jira.get-sprints"
with:
project: "{{project_key}}"
outputParameters:
- name: name
type: string
mapping: "$.values[0].name"
- name: state
type: string
mapping: "$.values[0].state"
consumes:
- type: http
namespace: jira
baseUri: "https://ey.com.atlassian.net/rest/agile/1.0"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: sprints
path: "/board/1/sprint"
operations:
- name: get-sprints
method: GET
Maintains KB at EY by finding stale articles and notifying owners.
naftiko: "0.5"
info:
label: "Knowledge Base Maintenance Pipeline"
description: "Maintains KB at EY by finding stale articles and notifying owners."
tags:
- knowledge-management
- confluence
- maintenance
capability:
exposes:
- type: mcp
namespace: kb-maint
port: 8080
tools:
- name: maintain-kb
description: "Maintain KB at EY."
inputParameters:
- name: space
in: body
type: string
description: "Confluence space."
- name: stale_days
in: body
type: number
description: "Days threshold."
steps:
- name: find
type: call
call: "confluence.search-stale"
with:
space: "{{space}}"
days: "{{stale_days}}"
- name: notify
type: call
call: "email.batch"
with:
to: "{{find.owners}}"
subject: "KB review needed"
- name: flag
type: call
call: "confluence.add-label"
with:
pages: "{{find.ids}}"
label: "needs-review"
- name: report
type: call
call: "slack.post-message"
with:
channel: "#kb"
text: "KB: {{find.count}} stale articles"
consumes:
- type: http
namespace: confluence
baseUri: "https://ey.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
operations:
- name: search-stale
method: GET
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates KPI digest at EY from Snowflake, Oracle, Power BI, and email.
naftiko: "0.5"
info:
label: "Weekly KPI Digest Pipeline"
description: "Generates KPI digest at EY from Snowflake, Oracle, Power BI, and email."
tags:
- reporting
- kpi
- snowflake
- executive
capability:
exposes:
- type: mcp
namespace: kpi-digest
port: 8080
tools:
- name: gen-digest
description: "Generate KPI digest at EY."
inputParameters:
- name: week
in: body
type: string
description: "Week ending."
- name: dist
in: body
type: string
description: "Distribution list."
steps:
- name: ops
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM kpis WHERE w='{{week}}'"
- name: fin
type: call
call: "oracle.get-summary"
with:
period: "{{week}}"
- name: refresh
type: call
call: "power-bi.refresh"
with:
dataset: "exec_kpis"
- name: send
type: call
call: "email.send"
with:
to: "{{dist}}"
subject: "KPIs - {{week}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://ey.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: fin
path: "/summary"
operations:
- name: get-summary
method: GET
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Checks K8s pod health at EY.
naftiko: "0.5"
info:
label: "K8s Pod Health"
description: "Checks K8s pod health at EY."
tags:
- containers
- kubernetes
- infrastructure
capability:
exposes:
- type: mcp
namespace: k8s-pod
port: 8080
tools:
- name: check-pod
description: "Check pod at EY."
inputParameters:
- name: namespace
in: body
type: string
description: "Namespace."
- name: pod
in: body
type: string
description: "Pod name."
call: "k8s.get-pod"
with:
namespace: "{{namespace}}"
pod: "{{pod}}"
outputParameters:
- name: phase
type: string
mapping: "$.status.phase"
consumes:
- type: http
namespace: k8s
baseUri: "https://k8s.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.k8s_token"
resources:
- name: pods
path: "/namespaces/{{namespace}}/pods/{{pod}}"
inputParameters:
- name: namespace
in: path
- name: pod
in: path
operations:
- name: get-pod
method: GET
Checks license compliance at EY via scanning, entitlements, and procurement.
naftiko: "0.5"
info:
label: "License Compliance Pipeline"
description: "Checks license compliance at EY via scanning, entitlements, and procurement."
tags:
- compliance
- licensing
- procurement
capability:
exposes:
- type: mcp
namespace: license-comp
port: 8080
tools:
- name: check-licenses
description: "Check license compliance at EY."
inputParameters:
- name: software
in: body
type: string
description: "Software."
- name: vendor
in: body
type: string
description: "Vendor."
steps:
- name: scan
type: call
call: "assets.installations"
with:
sw: "{{software}}"
- name: entitlements
type: call
call: "licenses.get"
with:
sw: "{{software}}"
- name: flag
type: call
call: "compliance.flag"
with:
installed: "{{scan.count}}"
entitled: "{{entitlements.count}}"
- name: procure
type: call
call: "servicenow.create-request"
with:
type: "license"
sw: "{{software}}"
consumes:
- type: http
namespace: assets
baseUri: "https://assets.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.asset_token"
resources:
- name: installations
path: "/installations"
operations:
- name: installations
method: GET
- type: http
namespace: licenses
baseUri: "https://licenses.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.license_token"
resources:
- name: ent
path: "/entitlements"
operations:
- name: get
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: overages
path: "/flag"
operations:
- name: flag
method: POST
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Retrieves the current compliance score from Microsoft Purview for an EY client tenant. Used during regulatory advisory engagements to benchmark compliance posture.
naftiko: "0.5"
info:
label: "Microsoft Purview Compliance Score Check"
description: "Retrieves the current compliance score from Microsoft Purview for an EY client tenant. Used during regulatory advisory engagements to benchmark compliance posture."
tags:
- advisory
- compliance
- microsoft-purview
- governance
capability:
exposes:
- type: mcp
namespace: compliance-scoring
port: 8080
tools:
- name: get-compliance-score
description: "Retrieve the Microsoft Purview compliance score for a tenant."
inputParameters:
- name: tenant_id
in: body
type: string
description: "The Azure AD tenant ID."
call: "purview.get-compliance-score"
with:
tenant_id: "{{tenant_id}}"
outputParameters:
- name: score
type: string
mapping: "$.complianceScore"
- name: max_score
type: string
mapping: "$.maxScore"
- name: assessment_count
type: string
mapping: "$.assessmentCount"
consumes:
- type: http
namespace: purview
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: compliance
path: "/security/secureScores?$top=1"
operations:
- name: get-compliance-score
method: GET
Retrieves high-severity security alerts from Microsoft Sentinel and creates corresponding ServiceNow incidents for the EY cybersecurity advisory team to investigate.
naftiko: "0.5"
info:
label: "Microsoft Sentinel Security Alert Triage"
description: "Retrieves high-severity security alerts from Microsoft Sentinel and creates corresponding ServiceNow incidents for the EY cybersecurity advisory team to investigate."
tags:
- advisory
- security
- microsoft-sentinel
- servicenow
capability:
exposes:
- type: mcp
namespace: security-triage
port: 8080
tools:
- name: triage-sentinel-alerts
description: "Pull high-severity Sentinel alerts and create ServiceNow incidents for investigation."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Log Analytics workspace ID for Sentinel."
- name: severity
in: body
type: string
description: "Alert severity filter (e.g., High, Critical)."
steps:
- name: get-alerts
type: call
call: "sentinel.get-alerts"
with:
workspace_id: "{{workspace_id}}"
severity: "{{severity}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Sentinel Alert: {{get-alerts.alerts[0].title}}"
category: "security_incident"
priority: "1"
description: "Severity: {{severity}}. Alert count: {{get-alerts.alert_count}}. First alert: {{get-alerts.alerts[0].description}}."
consumes:
- type: http
namespace: sentinel
baseUri: "https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/$secrets.azure_resource_group/providers/Microsoft.OperationalInsights/workspaces"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: alerts
path: "/{{workspace_id}}/providers/Microsoft.SecurityInsights/incidents?api-version=2023-11-01&$filter=properties/severity eq '{{severity}}'"
inputParameters:
- name: workspace_id
in: path
- name: severity
in: query
operations:
- name: get-alerts
method: GET
- type: http
namespace: servicenow
baseUri: "https://ey.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
Creates a Microsoft Teams meeting for engagement team members with a specified agenda and sends calendar invites via Outlook.
naftiko: "0.5"
info:
label: "Microsoft Teams Meeting Scheduler"
description: "Creates a Microsoft Teams meeting for engagement team members with a specified agenda and sends calendar invites via Outlook."
tags:
- collaboration
- microsoft-teams
- microsoft-outlook
- scheduling
capability:
exposes:
- type: mcp
namespace: meeting-scheduler
port: 8080
tools:
- name: schedule-teams-meeting
description: "Schedule a Teams meeting and send calendar invites to attendees."
inputParameters:
- name: organizer_email
in: body
type: string
description: "Email of the meeting organizer."
- name: subject
in: body
type: string
description: "Meeting subject."
- name: start_time
in: body
type: string
description: "Meeting start time in ISO 8601 format."
- name: end_time
in: body
type: string
description: "Meeting end time in ISO 8601 format."
- name: attendees
in: body
type: string
description: "Comma-separated list of attendee emails."
call: "outlook.create-online-meeting"
with:
organizer: "{{organizer_email}}"
subject: "{{subject}}"
start: "{{start_time}}"
end: "{{end_time}}"
attendees: "{{attendees}}"
is_online: true
outputParameters:
- name: meeting_url
type: string
mapping: "$.onlineMeeting.joinUrl"
- name: event_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: events
path: "/users/{{organizer}}/events"
inputParameters:
- name: organizer
in: path
operations:
- name: create-online-meeting
method: POST
Generates monthly security reports at EY from Splunk and Qualys.
naftiko: "0.5"
info:
label: "Monthly Security Report Pipeline"
description: "Generates monthly security reports at EY from Splunk and Qualys."
tags:
- security
- reporting
- splunk
- compliance
capability:
exposes:
- type: mcp
namespace: sec-report
port: 8080
tools:
- name: gen-sec-report
description: "Generate security report at EY."
inputParameters:
- name: month
in: body
type: string
description: "Month."
steps:
- name: splunk
type: call
call: "splunk.search"
with:
query: "index=security earliest=-30d"
- name: scans
type: call
call: "qualys.results"
with:
month: "{{month}}"
- name: compile
type: call
call: "analytics.compile-security"
with:
events: "{{splunk.count}}"
vulns: "{{scans.critical}}"
- name: send
type: call
call: "email.send"
with:
to: "ciso@co.com"
subject: "Security - {{month}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.ey.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/v2"
authentication:
type: bearer
token: "$secrets.qualys_token"
resources:
- name: results
path: "/fo/scan/results"
operations:
- name: results
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: security
path: "/compile"
operations:
- name: compile-security
method: POST
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Checks the health status of a MuleSoft API deployment. Used by EY technology consulting teams to monitor client integration platform health during transformation projects.
naftiko: "0.5"
info:
label: "MuleSoft API Health Check"
description: "Checks the health status of a MuleSoft API deployment. Used by EY technology consulting teams to monitor client integration platform health during transformation projects."
tags:
- consulting
- integration
- mulesoft
- monitoring
capability:
exposes:
- type: mcp
namespace: api-health
port: 8080
tools:
- name: check-mulesoft-api-health
description: "Check the deployment status and health of a MuleSoft API by environment and application name."
inputParameters:
- name: environment_id
in: body
type: string
description: "The MuleSoft environment ID."
- name: app_name
in: body
type: string
description: "The application name."
call: "mulesoft.get-deployment-status"
with:
environment_id: "{{environment_id}}"
app_name: "{{app_name}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: last_update
type: string
mapping: "$.lastUpdateTime"
- name: worker_count
type: string
mapping: "$.workers.amount"
consumes:
- type: http
namespace: mulesoft
baseUri: "https://anypoint.mulesoft.com/cloudhub/api/v2"
authentication:
type: bearer
token: "$secrets.mulesoft_token"
resources:
- name: applications
path: "/applications/{{app_name}}?environmentId={{environment_id}}"
inputParameters:
- name: app_name
in: path
- name: environment_id
in: query
operations:
- name: get-deployment-status
method: GET
Onboards employees at EY with Okta, ServiceNow, Slack, and calendar.
naftiko: "0.5"
info:
label: "New Employee IT Onboarding Pipeline"
description: "Onboards employees at EY with Okta, ServiceNow, Slack, and calendar."
tags:
- hr
- onboarding
- okta
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: it-onboarding
port: 8080
tools:
- name: onboard-employee
description: "Onboard employees at EY."
inputParameters:
- name: name
in: body
type: string
description: "Name."
- name: dept
in: body
type: string
description: "Department."
- name: start
in: body
type: string
description: "Start date."
steps:
- name: okta
type: call
call: "okta.create-user"
with:
name: "{{name}}"
department: "{{dept}}"
- name: equip
type: call
call: "servicenow.create-request"
with:
type: "new_hire"
for: "{{name}}"
- name: slack
type: call
call: "slack.invite"
with:
email: "{{okta.email}}"
- name: orient
type: call
call: "calendar.create-event"
with:
title: "Orientation - {{name}}"
date: "{{start}}"
consumes:
- type: http
namespace: okta
baseUri: "https://ey.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: users
path: "/users.admin.invite"
operations:
- name: invite
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/hr/events"
operations:
- name: create-event
method: POST
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for employee documents, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for employee documents, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee start date in YYYY-MM-DD format."
- name: department
in: body
type: string
description: "The department or service line the new hire is joining."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}."
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "ey_hr_onboarding"
folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to EY, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}."
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: servicenow
baseUri: "https://ey.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/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Checks New Relic APM at EY.
naftiko: "0.5"
info:
label: "New Relic APM Check"
description: "Checks New Relic APM at EY."
tags:
- monitoring
- new-relic
- apm
capability:
exposes:
- type: mcp
namespace: nr-apm
port: 8080
tools:
- name: check-apm
description: "Check APM at EY."
inputParameters:
- name: app_id
in: body
type: string
description: "App ID."
call: "newrelic.get-app"
with:
app_id: "{{app_id}}"
outputParameters:
- name: health
type: string
mapping: "$.application.health_status"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: bearer
token: "$secrets.new_relic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app
method: GET
Checks Okta user at EY.
naftiko: "0.5"
info:
label: "Okta User Check"
description: "Checks Okta user at EY."
tags:
- identity
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: okta-user
port: 8080
tools:
- name: check-user
description: "Check user at EY."
inputParameters:
- name: email
in: body
type: string
description: "Email."
call: "okta.get-user"
with:
email: "{{email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: okta
baseUri: "https://ey.com.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 vendor details from Oracle E-Business Suite by vendor ID. Used by EY audit teams to validate accounts payable vendor master data.
naftiko: "0.5"
info:
label: "Oracle E-Business Suite Vendor Lookup"
description: "Retrieves vendor details from Oracle E-Business Suite by vendor ID. Used by EY audit teams to validate accounts payable vendor master data."
tags:
- audit
- erp
- oracle-e-business-suite
- accounts-payable
capability:
exposes:
- type: mcp
namespace: ebs-vendors
port: 8080
tools:
- name: get-vendor
description: "Look up a vendor in Oracle E-Business Suite by vendor ID."
inputParameters:
- name: vendor_id
in: body
type: string
description: "The Oracle EBS vendor ID."
call: "ebs.get-vendor"
with:
vendor_id: "{{vendor_id}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.VendorName"
- name: vendor_type
type: string
mapping: "$.VendorType"
- name: payment_terms
type: string
mapping: "$.PaymentTerms"
- name: active_flag
type: string
mapping: "$.EnabledFlag"
consumes:
- type: http
namespace: ebs
baseUri: "https://ey-ebs.oraclecloud.com/webservices/rest"
authentication:
type: basic
username: "$secrets.ebs_user"
password: "$secrets.ebs_password"
resources:
- name: vendors
path: "/suppliers/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
Extracts a financial consolidation report from Oracle Hyperion by entity and period, then uploads the report data to a SharePoint audit workpaper library for engagement documentation.
naftiko: "0.5"
info:
label: "Oracle Hyperion Financial Report Extract"
description: "Extracts a financial consolidation report from Oracle Hyperion by entity and period, then uploads the report data to a SharePoint audit workpaper library for engagement documentation."
tags:
- audit
- finance
- oracle-hyperion
- consolidation
- sharepoint
capability:
exposes:
- type: mcp
namespace: hyperion-reports
port: 8080
tools:
- name: get-hyperion-report
description: "Extract an Oracle Hyperion consolidation report and upload to SharePoint."
inputParameters:
- name: entity
in: body
type: string
description: "The Hyperion entity name."
- name: period
in: body
type: string
description: "The reporting period (e.g., FY2025)."
- name: scenario
in: body
type: string
description: "The scenario (e.g., Actual, Budget)."
- name: sharepoint_site
in: body
type: string
description: "The SharePoint site ID for workpaper storage."
steps:
- name: fetch-report
type: call
call: "hyperion.get-report"
with:
entity: "{{entity}}"
period: "{{period}}"
scenario: "{{scenario}}"
- name: upload-to-sharepoint
type: call
call: "sharepoint.upload-file"
with:
site_id: "{{sharepoint_site}}"
folder_path: "Workpapers/Hyperion"
file_name: "Hyperion_{{entity}}_{{period}}_{{scenario}}.json"
content: "{{fetch-report.report_data}}"
consumes:
- type: http
namespace: hyperion
baseUri: "https://ey-hyperion.oraclecloud.com/HyperionPlanning/rest/v3"
authentication:
type: basic
username: "$secrets.hyperion_user"
password: "$secrets.hyperion_password"
resources:
- name: reports
path: "/applications/HFM/reports?entity={{entity}}&period={{period}}&scenario={{scenario}}"
inputParameters:
- name: entity
in: query
- name: period
in: query
- name: scenario
in: query
operations:
- name: get-report
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
Checks on-call at EY.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Check"
description: "Checks on-call at EY."
tags:
- incident-management
- pagerduty
- on-call
capability:
exposes:
- type: mcp
namespace: pd-oncall
port: 8080
tools:
- name: get-oncall
description: "Check on-call at EY."
inputParameters:
- name: schedule_id
in: body
type: string
description: "Schedule ID."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: user
type: string
mapping: "$.oncalls[0].user.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Creates postmortems at EY.
naftiko: "0.5"
info:
label: "Incident Postmortem Pipeline"
description: "Creates postmortems at EY."
tags:
- incident-management
- postmortem
- pagerduty
- confluence
capability:
exposes:
- type: mcp
namespace: postmortem
port: 8080
tools:
- name: create-postmortem
description: "Create postmortem at EY."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
steps:
- name: timeline
type: call
call: "pagerduty.get-log"
with:
id: "{{incident_id}}"
- name: metrics
type: call
call: "datadog.get-metrics"
with:
incident: "{{incident_id}}"
- name: doc
type: call
call: "confluence.create-page"
with:
title: "Postmortem: {{timeline.title}}"
body: "Impact: {{metrics.impact}}"
- name: review
type: call
call: "calendar.create-event"
with:
title: "Review: {{timeline.title}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{id}}/log_entries"
inputParameters:
- name: id
in: path
operations:
- name: get-log
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: incidents
path: "/incidents"
operations:
- name: get-metrics
method: GET
- type: http
namespace: confluence
baseUri: "https://ey.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/sre/events"
operations:
- name: create-event
method: POST
Checks Power BI refresh at EY.
naftiko: "0.5"
info:
label: "Power BI Refresh Check"
description: "Checks Power BI refresh at EY."
tags:
- analytics
- power-bi
- dashboards
capability:
exposes:
- type: mcp
namespace: pbi-refresh
port: 8080
tools:
- name: check-refresh
description: "Check refresh at EY."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Dataset ID."
call: "power-bi.get-refresh"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
consumes:
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh
method: GET
Triggers a dataset refresh in Power BI and notifies the consulting team via Slack when the refresh is queued. Used by EY consulting teams to ensure dashboards reflect the latest client data.
naftiko: "0.5"
info:
label: "Power BI Report Refresh Trigger"
description: "Triggers a dataset refresh in Power BI and notifies the consulting team via Slack when the refresh is queued. Used by EY consulting teams to ensure dashboards reflect the latest client data."
tags:
- consulting
- analytics
- power-bi
- reporting
- slack
capability:
exposes:
- type: mcp
namespace: analytics-refresh
port: 8080
tools:
- name: refresh-powerbi-dataset
description: "Trigger a Power BI dataset refresh and notify the team via Slack."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace (group) ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
- name: slack_channel
in: body
type: string
description: "Slack channel for refresh notifications."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Power BI dataset refresh queued. Workspace: {{workspace_id}}, Dataset: {{dataset_id}}. Refresh ID: {{trigger-refresh.refresh_id}}."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refreshes
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates compliance reports at EY from Snowflake, Power BI, and email.
naftiko: "0.5"
info:
label: "Quarterly Compliance Report Pipeline"
description: "Generates compliance reports at EY from Snowflake, Power BI, and email."
tags:
- compliance
- reporting
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: compliance-rpt
port: 8080
tools:
- name: gen-report
description: "Generate compliance reports at EY."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter."
- name: type
in: body
type: string
description: "Type."
steps:
- name: data
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM compliance WHERE q='{{quarter}}'"
- name: metrics
type: call
call: "analytics.compute"
with:
data: "{{data.results}}"
- name: refresh
type: call
call: "power-bi.refresh"
with:
dataset: "compliance"
- name: send
type: call
call: "email.send"
with:
to: "compliance@co.com"
subject: "{{type}} - {{quarter}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://ey.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: analytics
baseUri: "https://analytics.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: metrics
path: "/compute"
operations:
- name: compute
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Checks Redis at EY.
naftiko: "0.5"
info:
label: "Redis Cache Status"
description: "Checks Redis at EY."
tags:
- caching
- redis
- infrastructure
capability:
exposes:
- type: mcp
namespace: redis
port: 8080
tools:
- name: check-cache
description: "Check Redis at EY."
inputParameters:
- name: instance
in: body
type: string
description: "Instance ID."
call: "redis.get-info"
with:
instance: "{{instance}}"
outputParameters:
- name: memory
type: string
mapping: "$.used_memory_human"
consumes:
- type: http
namespace: redis
baseUri: "https://redis.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.redis_token"
resources:
- name: instances
path: "/instances/{{instance}}/info"
inputParameters:
- name: instance
in: path
operations:
- name: get-info
method: GET
Retrieves real-time market data from Refinitiv Eikon for a given instrument. Used by EY transaction advisory teams for deal valuation and market analysis.
naftiko: "0.5"
info:
label: "Refinitiv Eikon Market Data Lookup"
description: "Retrieves real-time market data from Refinitiv Eikon for a given instrument. Used by EY transaction advisory teams for deal valuation and market analysis."
tags:
- advisory
- transactions
- refinitiv
- market-data
capability:
exposes:
- type: mcp
namespace: market-data
port: 8080
tools:
- name: get-market-data
description: "Retrieve market data from Refinitiv Eikon by instrument RIC."
inputParameters:
- name: ric
in: body
type: string
description: "The Reuters Instrument Code (RIC)."
call: "refinitiv.get-instrument"
with:
ric: "{{ric}}"
outputParameters:
- name: last_price
type: string
mapping: "$.data[0].fields.TRDPRC_1"
- name: market_cap
type: string
mapping: "$.data[0].fields.MKT_CAP"
- name: pe_ratio
type: string
mapping: "$.data[0].fields.PE_RATIO"
consumes:
- type: http
namespace: refinitiv
baseUri: "https://api.refinitiv.com/data/pricing/v1"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: instruments
path: "/views/summary/{{ric}}"
inputParameters:
- name: ric
in: path
operations:
- name: get-instrument
method: GET
Checks release readiness at EY.
naftiko: "0.5"
info:
label: "Release Readiness Pipeline"
description: "Checks release readiness at EY."
tags:
- release-management
- devops
- quality
capability:
exposes:
- type: mcp
namespace: release-ready
port: 8080
tools:
- name: check-release
description: "Check release at EY."
inputParameters:
- name: release_id
in: body
type: string
description: "Release ID."
- name: project
in: body
type: string
description: "Project."
steps:
- name: tests
type: call
call: "azdo.get-tests"
with:
project: "{{project}}"
release: "{{release_id}}"
- name: quality
type: call
call: "sonarqube.get-gate"
with:
project: "{{project}}"
- name: security
type: call
call: "security.get-scan"
with:
project: "{{project}}"
- name: doc
type: call
call: "confluence.create-page"
with:
title: "Release - {{release_id}}"
body: "Tests: {{tests.pass_rate}}% Quality: {{quality.status}}"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/ey.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: tests
path: "/{{project}}/_apis/test/runs"
inputParameters:
- name: project
in: path
operations:
- name: get-tests
method: GET
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.ey.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality
path: "/qualitygates/project_status"
operations:
- name: get-gate
method: GET
- type: http
namespace: security
baseUri: "https://security.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
resources:
- name: scans
path: "/results"
operations:
- name: get-scan
method: GET
- type: http
namespace: confluence
baseUri: "https://ey.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves pending access certification campaigns from SailPoint for IT audit review. Used by EY teams to validate client identity governance controls.
naftiko: "0.5"
info:
label: "SailPoint Access Certification Review"
description: "Retrieves pending access certification campaigns from SailPoint for IT audit review. Used by EY teams to validate client identity governance controls."
tags:
- audit
- identity
- sailpoint
- governance
capability:
exposes:
- type: mcp
namespace: identity-governance
port: 8080
tools:
- name: get-certification-campaigns
description: "Retrieve active access certification campaigns from SailPoint."
inputParameters:
- name: campaign_status
in: body
type: string
description: "Campaign status filter (e.g., ACTIVE, COMPLETED)."
call: "sailpoint.list-campaigns"
with:
status: "{{campaign_status}}"
outputParameters:
- name: campaigns
type: string
mapping: "$.value"
- name: total_count
type: string
mapping: "$.count"
consumes:
- type: http
namespace: sailpoint
baseUri: "https://ey-client.api.identitynow.com/v3"
authentication:
type: bearer
token: "$secrets.sailpoint_token"
resources:
- name: campaigns
path: "/campaigns?filters=status eq \"{{status}}\""
inputParameters:
- name: status
in: query
operations:
- name: list-campaigns
method: GET
Retrieves open opportunities from Salesforce for a given account and posts a pipeline summary to the business development Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Lookup"
description: "Retrieves open opportunities from Salesforce for a given account and posts a pipeline summary to the business development Microsoft Teams channel."
tags:
- sales
- business-development
- salesforce
- pipeline
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bd-pipeline
port: 8080
tools:
- name: get-opportunity-pipeline
description: "Retrieve open Salesforce opportunities and post a summary to the BD Teams channel."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
- name: teams_channel_webhook
in: body
type: string
description: "The Microsoft Teams webhook for BD notifications."
steps:
- name: fetch-opportunities
type: call
call: "salesforce.query-opportunities"
with:
account_id: "{{account_id}}"
- name: post-summary
type: call
call: "msteams.send-webhook"
with:
webhook_url: "{{teams_channel_webhook}}"
text: "Pipeline for account {{account_id}}: {{fetch-opportunities.total_size}} open opportunities. Total value: {{fetch-opportunities.total_value}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://ey.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query?q=SELECT+Name,StageName,Amount,CloseDate+FROM+Opportunity+WHERE+AccountId='{{account_id}}'+AND+IsClosed=false"
inputParameters:
- name: account_id
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: webhooks
path: "/{{webhook_url}}"
inputParameters:
- name: webhook_url
in: path
operations:
- name: send-webhook
method: POST
Retrieves supplier risk data from SAP Ariba for a specified vendor, pulls additional financial data from Bloomberg, and posts a consolidated risk summary to the advisory Confluence space.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Risk Review"
description: "Retrieves supplier risk data from SAP Ariba for a specified vendor, pulls additional financial data from Bloomberg, and posts a consolidated risk summary to the advisory Confluence space."
tags:
- advisory
- procurement
- sap-ariba
- bloomberg
- confluence
capability:
exposes:
- type: mcp
namespace: supplier-risk
port: 8080
tools:
- name: review-supplier-risk
description: "Compile supplier risk data from SAP Ariba and Bloomberg financial indicators into a Confluence summary."
inputParameters:
- name: supplier_id
in: body
type: string
description: "The SAP Ariba supplier ID."
- name: ticker
in: body
type: string
description: "Bloomberg ticker for the supplier entity."
- name: confluence_space
in: body
type: string
description: "Confluence space key for the advisory engagement."
steps:
- name: get-supplier-data
type: call
call: "ariba.get-supplier"
with:
supplier_id: "{{supplier_id}}"
- name: get-financial-data
type: call
call: "bloomberg.get-company-data"
with:
ticker: "{{ticker}}"
- name: publish-summary
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space}}"
title: "Supplier Risk Review - {{get-supplier-data.supplier_name}}"
body: "Supplier: {{get-supplier-data.supplier_name}}. Risk score: {{get-supplier-data.risk_score}}. Revenue: {{get-financial-data.revenue}}. Credit rating: {{get-financial-data.credit_rating}}."
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier-management/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
inputParameters:
- name: apiKey
in: header
value: "$secrets.ariba_api_key"
resources:
- name: suppliers
path: "/suppliers/{{supplier_id}}"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-supplier
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: company-data
path: "/catalogs/bbg/fields?identifier={{ticker}}"
inputParameters:
- name: ticker
in: query
operations:
- name: get-company-data
method: GET
- type: http
namespace: confluence
baseUri: "https://ey-collab.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
Creates a new expense report in SAP Concur for an EY professional, attaches receipt details, and notifies the approving manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Submission"
description: "Creates a new expense report in SAP Concur for an EY professional, attaches receipt details, and notifies the approving manager via Microsoft Teams."
tags:
- finance
- expense-management
- sap-concur
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: expense-management
port: 8080
tools:
- name: submit-expense-report
description: "Create an expense report in SAP Concur with line items and notify the approver via Teams."
inputParameters:
- name: employee_email
in: body
type: string
description: "The EY employee email address."
- name: report_name
in: body
type: string
description: "Name for the expense report."
- name: total_amount
in: body
type: string
description: "Total expense amount."
- name: currency
in: body
type: string
description: "Currency code (e.g., USD)."
- name: approver_email
in: body
type: string
description: "Email of the approving manager."
steps:
- name: create-report
type: call
call: "concur.create-expense-report"
with:
employee_email: "{{employee_email}}"
report_name: "{{report_name}}"
total: "{{total_amount}}"
currency: "{{currency}}"
- name: notify-approver
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{approver_email}}"
text: "New expense report '{{report_name}}' submitted by {{employee_email}} for {{total_amount}} {{currency}}. Report ID: {{create-report.report_id}}."
consumes:
- type: http
namespace: concur
baseUri: "https://us2.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports"
operations:
- name: create-expense-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Extracts data from a SAP HANA view for EY advisory analytics. Returns a result set used for client data modeling and transformation projects.
naftiko: "0.5"
info:
label: "SAP HANA Data Extraction for Analytics"
description: "Extracts data from a SAP HANA view for EY advisory analytics. Returns a result set used for client data modeling and transformation projects."
tags:
- advisory
- data
- sap-hana
- analytics
capability:
exposes:
- type: mcp
namespace: hana-analytics
port: 8080
tools:
- name: query-hana-view
description: "Execute a query against a SAP HANA calculation view and return the result set."
inputParameters:
- name: schema
in: body
type: string
description: "The HANA schema name."
- name: view_name
in: body
type: string
description: "The calculation view name."
- name: top_rows
in: body
type: string
description: "Number of rows to return."
call: "hana.query-view"
with:
schema: "{{schema}}"
view_name: "{{view_name}}"
top: "{{top_rows}}"
outputParameters:
- name: row_count
type: string
mapping: "$.d.__count"
- name: results
type: string
mapping: "$.d.results"
consumes:
- type: http
namespace: hana
baseUri: "https://ey-hana.sap.com/sap/hana/xs/odata"
authentication:
type: basic
username: "$secrets.hana_user"
password: "$secrets.hana_password"
resources:
- name: views
path: "/{{schema}}/{{view_name}}.xsodata/Query?$top={{top}}&$format=json"
inputParameters:
- name: schema
in: path
- name: view_name
in: path
- name: top
in: query
operations:
- name: query-view
method: GET
Checks SAP PO at EY.
naftiko: "0.5"
info:
label: "SAP PO Check"
description: "Checks SAP PO at EY."
tags:
- procurement
- sap
- purchase-orders
capability:
exposes:
- type: mcp
namespace: sap-po
port: 8080
tools:
- name: get-po
description: "Check PO at EY."
inputParameters:
- name: po_number
in: body
type: string
description: "PO number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: vendor
type: string
mapping: "$.order.vendor"
- name: status
type: string
mapping: "$.order.status"
consumes:
- type: http
namespace: sap
baseUri: "https://sap.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: purchase-orders
path: "/purchase-orders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Retrieves a general ledger account balance from SAP S/4HANA by company code and fiscal year, then posts the balance summary to the audit engagement Slack channel for team visibility.
naftiko: "0.5"
info:
label: "SAP S/4HANA General Ledger Lookup"
description: "Retrieves a general ledger account balance from SAP S/4HANA by company code and fiscal year, then posts the balance summary to the audit engagement Slack channel for team visibility."
tags:
- audit
- finance
- sap
- sap-s4hana
- general-ledger
- slack
capability:
exposes:
- type: mcp
namespace: audit-gl
port: 8080
tools:
- name: get-gl-balance
description: "Look up a SAP S/4HANA general ledger account balance and notify the audit team via Slack."
inputParameters:
- name: company_code
in: body
type: string
description: "The SAP company code (4-digit)."
- name: gl_account
in: body
type: string
description: "The general ledger account number."
- name: fiscal_year
in: body
type: string
description: "The fiscal year (YYYY)."
- name: slack_channel
in: body
type: string
description: "The Slack channel for audit notifications."
steps:
- name: fetch-balance
type: call
call: "sap.get-gl-balance"
with:
company_code: "{{company_code}}"
gl_account: "{{gl_account}}"
fiscal_year: "{{fiscal_year}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "GL {{gl_account}} ({{company_code}}, FY{{fiscal_year}}): Balance {{fetch-balance.balance}} {{fetch-balance.currency}}. Debits: {{fetch-balance.debit_total}}, Credits: {{fetch-balance.credit_total}}."
consumes:
- type: http
namespace: sap
baseUri: "https://ey-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: gl-balances
path: "/GLAccountBalanceSet(CompanyCode='{{company_code}}',GLAccount='{{gl_account}}',FiscalYear='{{fiscal_year}}')"
inputParameters:
- name: company_code
in: path
- name: gl_account
in: path
- name: fiscal_year
in: path
operations:
- name: get-gl-balance
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Remediates vulnerabilities at EY via scanning, Jira, and Slack.
naftiko: "0.5"
info:
label: "Security Vulnerability Remediation Pipeline"
description: "Remediates vulnerabilities at EY via scanning, Jira, and Slack."
tags:
- security
- vulnerability-management
- jira
capability:
exposes:
- type: mcp
namespace: vuln-fix
port: 8080
tools:
- name: remediate
description: "Fix vulnerabilities at EY."
inputParameters:
- name: target
in: body
type: string
description: "Target."
- name: policy
in: body
type: string
description: "Policy."
steps:
- name: scan
type: call
call: "qualys.scan"
with:
target: "{{target}}"
policy: "{{policy}}"
- name: prioritize
type: call
call: "security.prioritize"
with:
scan: "{{scan.id}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Vulns: {{prioritize.critical}} critical"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#security"
text: "Scan: {{prioritize.critical}} critical"
consumes:
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/v2"
authentication:
type: bearer
token: "$secrets.qualys_token"
resources:
- name: scans
path: "/fo/scan"
operations:
- name: scan
method: POST
- type: http
namespace: security
baseUri: "https://security.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
resources:
- name: vulns
path: "/prioritize"
operations:
- name: prioritize
method: POST
- type: http
namespace: jira
baseUri: "https://ey.com.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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Creates a ServiceNow change request for a client IT environment change, routes it for CAB approval, and notifies the implementation team in Microsoft Teams once approved.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Approval Pipeline"
description: "Creates a ServiceNow change request for a client IT environment change, routes it for CAB approval, and notifies the implementation team in Microsoft Teams once approved."
tags:
- consulting
- it-service-management
- servicenow
- microsoft-teams
- change-management
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: submit-change-request
description: "Create a ServiceNow change request and notify the implementation team in Teams."
inputParameters:
- name: short_description
in: body
type: string
description: "Short description of the change."
- name: change_type
in: body
type: string
description: "Type of change (Normal, Standard, Emergency)."
- name: assigned_group
in: body
type: string
description: "The group responsible for implementation."
- name: teams_channel_webhook
in: body
type: string
description: "The Microsoft Teams webhook URL for notifications."
steps:
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "{{short_description}}"
type: "{{change_type}}"
assignment_group: "{{assigned_group}}"
- name: notify-team
type: call
call: "msteams.send-webhook"
with:
webhook_url: "{{teams_channel_webhook}}"
text: "Change request {{create-change.number}} created: {{short_description}}. Type: {{change_type}}. Assigned to: {{assigned_group}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://ey.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: webhooks
path: "/{{webhook_url}}"
inputParameters:
- name: webhook_url
in: path
operations:
- name: send-webhook
method: POST
Checks IT incident in ServiceNow for EY.
naftiko: "0.5"
info:
label: "ServiceNow Incident Detail Check"
description: "Checks IT incident in ServiceNow for EY."
tags:
- it-service
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: snow-incident
port: 8080
tools:
- name: check-incident
description: "Check incident at EY."
inputParameters:
- name: incident_number
in: body
type: string
description: "Incident number."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
Retrieves a ServiceNow incident by number and posts the status summary to the specified Microsoft Teams channel. Used by EY IT support and engagement teams to share ticket updates.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup and Teams Alert"
description: "Retrieves a ServiceNow incident by number and posts the status summary to the specified Microsoft Teams channel. Used by EY IT support and engagement teams to share ticket updates."
tags:
- it-service-management
- servicenow
- incident
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-incidents
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident and post status to a Teams channel."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., INC0012345)."
- name: teams_channel_webhook
in: body
type: string
description: "The Microsoft Teams incoming webhook URL."
steps:
- name: fetch-incident
type: call
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
- name: post-to-teams
type: call
call: "msteams.send-webhook"
with:
webhook_url: "{{teams_channel_webhook}}"
text: "Incident {{incident_number}}: {{fetch-incident.short_description}}. Priority: {{fetch-incident.priority}}. State: {{fetch-incident.state}}. Assigned to: {{fetch-incident.assigned_group}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://ey.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: webhooks
path: "/{{webhook_url}}"
inputParameters:
- name: webhook_url
in: path
operations:
- name: send-webhook
method: POST
Uploads an audit workpaper document to a SharePoint engagement site and notifies the engagement manager via Outlook email.
naftiko: "0.5"
info:
label: "SharePoint Audit Workpaper Upload"
description: "Uploads an audit workpaper document to a SharePoint engagement site and notifies the engagement manager via Outlook email."
tags:
- audit
- document-management
- sharepoint
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: workpaper-mgmt
port: 8080
tools:
- name: upload-workpaper
description: "Upload a workpaper to SharePoint and notify the engagement manager."
inputParameters:
- name: site_id
in: body
type: string
description: "The SharePoint site ID."
- name: folder_path
in: body
type: string
description: "The folder path within the document library."
- name: file_name
in: body
type: string
description: "Name of the file to upload."
- name: file_content
in: body
type: string
description: "Base64-encoded file content."
- name: manager_email
in: body
type: string
description: "Email of the engagement manager."
steps:
- name: upload-file
type: call
call: "sharepoint.upload-file"
with:
site_id: "{{site_id}}"
folder_path: "{{folder_path}}"
file_name: "{{file_name}}"
content: "{{file_content}}"
- name: send-notification
type: call
call: "outlook.send-mail"
with:
to: "{{manager_email}}"
subject: "Workpaper uploaded: {{file_name}}"
body: "A new workpaper has been uploaded to {{folder_path}}/{{file_name}}. View at: {{upload-file.webUrl}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Retrieves SharePoint metadata at EY.
naftiko: "0.5"
info:
label: "SharePoint File Metadata"
description: "Retrieves SharePoint metadata at EY."
tags:
- document-management
- sharepoint
- collaboration
capability:
exposes:
- type: mcp
namespace: sp-docs
port: 8080
tools:
- name: get-file
description: "Look up file at EY."
inputParameters:
- name: site_id
in: body
type: string
description: "Site ID."
- name: file_path
in: body
type: string
description: "Path."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
path: "{{file_path}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: size
type: number
mapping: "$.size"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/root:/{{path}}"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: get-file
method: GET
Monitors SLAs at EY via Datadog and Slack.
naftiko: "0.5"
info:
label: "SLA Monitoring Pipeline"
description: "Monitors SLAs at EY via Datadog and Slack."
tags:
- operations
- sla
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: sla-monitor
port: 8080
tools:
- name: check-sla
description: "Monitor SLAs at EY."
inputParameters:
- name: service
in: body
type: string
description: "Service."
- name: target
in: body
type: number
description: "SLA target %."
steps:
- name: metrics
type: call
call: "datadog.get-sla"
with:
service: "{{service}}"
- name: check
type: call
call: "analytics.check-sla"
with:
uptime: "{{metrics.uptime}}"
target: "{{target}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#ops"
text: "SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)"
- name: log
type: call
call: "servicenow.create-incident"
with:
desc: "SLA breach: {{service}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/metrics"
operations:
- name: get-sla
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://ey.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Executes a SQL query against Snowflake to retrieve client analytics data and uploads the results as a Google Sheet for sharing with the engagement team.
naftiko: "0.5"
info:
label: "Snowflake Client Data Query"
description: "Executes a SQL query against Snowflake to retrieve client analytics data and uploads the results as a Google Sheet for sharing with the engagement team."
tags:
- analytics
- data
- snowflake
- google-sheets
- consulting
capability:
exposes:
- type: mcp
namespace: data-analytics
port: 8080
tools:
- name: query-snowflake
description: "Execute a SQL statement against Snowflake and export results to Google Sheets."
inputParameters:
- name: warehouse
in: body
type: string
description: "The Snowflake warehouse name."
- name: database
in: body
type: string
description: "The Snowflake database name."
- name: sql_statement
in: body
type: string
description: "The SQL query to execute."
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID for results export."
steps:
- name: run-query
type: call
call: "snowflake.execute-sql"
with:
warehouse: "{{warehouse}}"
database: "{{database}}"
statement: "{{sql_statement}}"
- name: export-to-sheets
type: call
call: "googlesheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "QueryResults!A1"
values: "{{run-query.data}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://ey-partner.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-sql
method: POST
- type: http
namespace: googlesheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT
Searches Splunk at EY.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Searches Splunk at EY."
tags:
- security
- splunk
- logging
capability:
exposes:
- type: mcp
namespace: splunk-search
port: 8080
tools:
- name: search-logs
description: "Search logs at EY."
inputParameters:
- name: query
in: body
type: string
description: "SPL query."
call: "splunk.search"
with:
query: "{{query}}"
outputParameters:
- name: count
type: number
mapping: "$.results.count"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.ey.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
Executes a Splunk search query against security event logs and creates a ServiceNow incident if anomalies are detected. Used by EY cybersecurity teams during IT audit engagements.
naftiko: "0.5"
info:
label: "Splunk Security Log Query"
description: "Executes a Splunk search query against security event logs and creates a ServiceNow incident if anomalies are detected. Used by EY cybersecurity teams during IT audit engagements."
tags:
- audit
- security
- splunk
- log-analysis
- servicenow
capability:
exposes:
- type: mcp
namespace: security-logs
port: 8080
tools:
- name: search-splunk-logs
description: "Execute a Splunk search and create a ServiceNow incident with findings."
inputParameters:
- name: search_query
in: body
type: string
description: "The Splunk SPL search query."
- name: earliest_time
in: body
type: string
description: "Earliest time for the search (e.g., -24h)."
- name: latest_time
in: body
type: string
description: "Latest time for the search (e.g., now)."
steps:
- name: run-search
type: call
call: "splunk.create-search"
with:
search: "{{search_query}}"
earliest_time: "{{earliest_time}}"
latest_time: "{{latest_time}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Splunk security log findings - Search {{run-search.search_id}}"
category: "security_review"
description: "Splunk search completed. Search ID: {{run-search.search_id}}. Query: {{search_query}}. Time range: {{earliest_time}} to {{latest_time}}."
consumes:
- type: http
namespace: splunk
baseUri: "https://ey-splunk.splunkcloud.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
- type: http
namespace: servicenow
baseUri: "https://ey.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
Exports a Tableau workbook view as a PDF and stores it in Google Drive. Used by EY consulting teams to share client-facing analytics deliverables.
naftiko: "0.5"
info:
label: "Tableau Dashboard Export"
description: "Exports a Tableau workbook view as a PDF and stores it in Google Drive. Used by EY consulting teams to share client-facing analytics deliverables."
tags:
- consulting
- analytics
- tableau
- google-drive
capability:
exposes:
- type: mcp
namespace: analytics-export
port: 8080
tools:
- name: export-tableau-to-drive
description: "Export a Tableau view as PDF and upload it to a Google Drive folder."
inputParameters:
- name: site_id
in: body
type: string
description: "The Tableau site ID."
- name: view_id
in: body
type: string
description: "The Tableau view ID to export."
- name: drive_folder_id
in: body
type: string
description: "The Google Drive folder ID for upload."
steps:
- name: export-pdf
type: call
call: "tableau.export-view-pdf"
with:
site_id: "{{site_id}}"
view_id: "{{view_id}}"
- name: upload-to-drive
type: call
call: "googledrive.upload-file"
with:
folder_id: "{{drive_folder_id}}"
file_name: "tableau_export_{{view_id}}.pdf"
content: "{{export-pdf.content}}"
consumes:
- type: http
namespace: tableau
baseUri: "https://ey-tableau.online.tableau.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: views
path: "/sites/{{site_id}}/views/{{view_id}}/pdf"
inputParameters:
- name: site_id
in: path
- name: view_id
in: path
operations:
- name: export-view-pdf
method: GET
- type: http
namespace: googledrive
baseUri: "https://www.googleapis.com/upload/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files?uploadType=multipart"
operations:
- name: upload-file
method: POST
Queries Oracle Financials for a client's tax return filing status and posts an update to the engagement Slack channel. Enables tax professionals to monitor deadlines without logging into Oracle.
naftiko: "0.5"
info:
label: "Tax Filing Status Tracker"
description: "Queries Oracle Financials for a client's tax return filing status and posts an update to the engagement Slack channel. Enables tax professionals to monitor deadlines without logging into Oracle."
tags:
- tax
- oracle
- oracle-financials
- slack
- compliance
capability:
exposes:
- type: mcp
namespace: tax-filing
port: 8080
tools:
- name: check-tax-filing-status
description: "Given a client entity ID and tax period, retrieve filing status from Oracle Financials and post an update to the engagement Slack channel."
inputParameters:
- name: entity_id
in: body
type: string
description: "The Oracle Financials entity identifier."
- name: tax_period
in: body
type: string
description: "The tax period in YYYY-MM format."
- name: slack_channel
in: body
type: string
description: "The Slack channel ID for the engagement team."
steps:
- name: get-filing-status
type: call
call: "oracle.get-tax-filing"
with:
entity_id: "{{entity_id}}"
tax_period: "{{tax_period}}"
- name: notify-team
type: call
call: "slack.post-message"
with:
channel: "{{slack_channel}}"
text: "Tax filing for entity {{entity_id}} (period {{tax_period}}): Status is {{get-filing-status.status}}. Due date: {{get-filing-status.due_date}}."
consumes:
- type: http
namespace: oracle
baseUri: "https://ey-oracle.fa.us2.oraclecloud.com/fscmRestApi/resources"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: tax-filings
path: "/taxReturns?q=EntityId={{entity_id}};TaxPeriod={{tax_period}}"
inputParameters:
- name: entity_id
in: query
- name: tax_period
in: query
operations:
- name: get-tax-filing
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_bot_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Retrieves Teams activity at EY.
naftiko: "0.5"
info:
label: "Teams Channel Activity"
description: "Retrieves Teams activity at EY."
tags:
- communications
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: teams-activity
port: 8080
tools:
- name: get-activity
description: "Check Teams activity at EY."
inputParameters:
- name: team_id
in: body
type: string
description: "Team ID."
- name: channel_id
in: body
type: string
description: "Channel ID."
call: "teams.get-messages"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
outputParameters:
- name: count
type: number
mapping: "$.value.length"
consumes:
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: get-messages
method: GET
Checks Terraform workspace at EY.
naftiko: "0.5"
info:
label: "Terraform Workspace Check"
description: "Checks Terraform workspace at EY."
tags:
- infrastructure
- terraform
- iac
capability:
exposes:
- type: mcp
namespace: tf-ws
port: 8080
tools:
- name: check-ws
description: "Check workspace at EY."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Workspace ID."
call: "terraform.get-ws"
with:
workspace_id: "{{workspace_id}}"
outputParameters:
- name: name
type: string
mapping: "$.data.attributes.name"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/workspaces/{{workspace_id}}"
inputParameters:
- name: workspace_id
in: path
operations:
- name: get-ws
method: GET
Retrieves transfer pricing data from SAP S/4HANA, generates a summary in Microsoft Excel via Graph API, and stores the workbook in SharePoint for the tax team to review.
naftiko: "0.5"
info:
label: "Transfer Pricing Document Workflow"
description: "Retrieves transfer pricing data from SAP S/4HANA, generates a summary in Microsoft Excel via Graph API, and stores the workbook in SharePoint for the tax team to review."
tags:
- tax
- transfer-pricing
- sap-s4hana
- microsoft-excel
- sharepoint
capability:
exposes:
- type: mcp
namespace: transfer-pricing
port: 8080
tools:
- name: generate-tp-workbook
description: "Extract transfer pricing data from SAP, create an Excel workbook, and store in SharePoint."
inputParameters:
- name: company_code
in: body
type: string
description: "The SAP company code."
- name: fiscal_year
in: body
type: string
description: "The fiscal year."
- name: sharepoint_site
in: body
type: string
description: "The SharePoint site ID for the tax engagement."
steps:
- name: get-tp-data
type: call
call: "sap.get-intercompany-transactions"
with:
company_code: "{{company_code}}"
fiscal_year: "{{fiscal_year}}"
- name: create-workbook
type: call
call: "msgraph.create-excel-workbook"
with:
site_id: "{{sharepoint_site}}"
file_name: "TP_Analysis_{{company_code}}_{{fiscal_year}}.xlsx"
- name: populate-data
type: call
call: "msgraph.update-excel-range"
with:
item_id: "{{create-workbook.id}}"
sheet_name: "IntercoTransactions"
range: "A1"
values: "{{get-tp-data.transactions}}"
consumes:
- type: http
namespace: sap
baseUri: "https://ey-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
inputParameters:
- name: Accept
in: header
value: "application/json"
- name: sap-client
in: header
value: "100"
resources:
- name: journal-entries
path: "/A_JournalEntryItemBasic?$filter=CompanyCode eq '{{company_code}}' and FiscalYear eq '{{fiscal_year}}' and IsIntercompanyTransaction eq true"
inputParameters:
- name: company_code
in: query
- name: fiscal_year
in: query
operations:
- name: get-intercompany-transactions
method: GET
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/sites/{{site_id}}/drive/root:/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_name
in: path
operations:
- name: create-excel-workbook
method: PUT
- name: excel-ranges
path: "/drives/items/{{item_id}}/workbook/worksheets/{{sheet_name}}/range(address='{{range}}')"
inputParameters:
- name: item_id
in: path
- name: sheet_name
in: path
- name: range
in: path
operations:
- name: update-excel-range
method: PATCH
Checks Vault secret at EY.
naftiko: "0.5"
info:
label: "Vault Secret Metadata"
description: "Checks Vault secret at EY."
tags:
- security
- vault
- secrets-management
capability:
exposes:
- type: mcp
namespace: vault
port: 8080
tools:
- name: check-secret
description: "Check secret at EY."
inputParameters:
- name: path
in: body
type: string
description: "Secret path."
call: "vault.get-metadata"
with:
path: "{{path}}"
outputParameters:
- name: version
type: number
mapping: "$.data.current_version"
consumes:
- type: http
namespace: vault
baseUri: "https://vault.ey.com/v1"
authentication:
type: bearer
token: "$secrets.vault_token"
resources:
- name: secrets
path: "/secret/metadata/{{path}}"
inputParameters:
- name: path
in: path
operations:
- name: get-metadata
method: GET
Processes invoices at EY via OCR, SAP matching, approval, and Oracle recording.
naftiko: "0.5"
info:
label: "Vendor Invoice Processing Pipeline"
description: "Processes invoices at EY via OCR, SAP matching, approval, and Oracle recording."
tags:
- finance
- accounts-payable
- sap
- oracle
capability:
exposes:
- type: mcp
namespace: invoice-proc
port: 8080
tools:
- name: process-invoice
description: "Process invoices at EY."
inputParameters:
- name: invoice_id
in: body
type: string
description: "Invoice ID."
- name: vendor_id
in: body
type: string
description: "Vendor ID."
steps:
- name: extract
type: call
call: "ocr.extract"
with:
doc: "{{invoice_id}}"
- name: match
type: call
call: "sap.match-po"
with:
vendor: "{{vendor_id}}"
amount: "{{extract.total}}"
- name: approve
type: call
call: "workflow.submit"
with:
invoice: "{{invoice_id}}"
- name: record
type: call
call: "oracle.create-payment"
with:
invoice: "{{invoice_id}}"
consumes:
- type: http
namespace: ocr
baseUri: "https://ocr.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.ocr_token"
resources:
- name: invoices
path: "/extract"
operations:
- name: extract
method: POST
- type: http
namespace: sap
baseUri: "https://sap.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: pos
path: "/match"
operations:
- name: match-po
method: POST
- type: http
namespace: workflow
baseUri: "https://workflow.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.workflow_token"
resources:
- name: approvals
path: "/submit"
operations:
- name: submit
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: payments
path: "/payments"
operations:
- name: create-payment
method: POST
Reviews vendors at EY.
naftiko: "0.5"
info:
label: "Quarterly Vendor Review Pipeline"
description: "Reviews vendors at EY."
tags:
- procurement
- vendor-management
- review
capability:
exposes:
- type: mcp
namespace: vendor-review
port: 8080
tools:
- name: review-vendor
description: "Review vendors at EY."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: quarter
in: body
type: string
description: "Quarter."
steps:
- name: perf
type: call
call: "procurement.get-metrics"
with:
vendor: "{{vendor_id}}"
q: "{{quarter}}"
- name: scorecard
type: call
call: "analytics.scorecard"
with:
data: "{{perf.data}}"
- name: invite
type: call
call: "email.send"
with:
to: "{{perf.contact}}"
subject: "QBR - {{quarter}}"
- name: schedule
type: call
call: "calendar.create-event"
with:
title: "QBR - {{perf.name}}"
consumes:
- type: http
namespace: procurement
baseUri: "https://procurement.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.procurement_token"
resources:
- name: vendors
path: "/vendors/{{vendor}}/metrics"
inputParameters:
- name: vendor
in: path
operations:
- name: get-metrics
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: scorecards
path: "/compute"
operations:
- name: scorecard
method: POST
- type: http
namespace: email
baseUri: "https://email.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/proc/events"
operations:
- name: create-event
method: POST
Retrieves employee compensation data from Workday, compares against market benchmarks in a Snowflake analytics warehouse, and generates a summary report posted to the HR Confluence space.
naftiko: "0.5"
info:
label: "Workday Compensation Review Pipeline"
description: "Retrieves employee compensation data from Workday, compares against market benchmarks in a Snowflake analytics warehouse, and generates a summary report posted to the HR Confluence space."
tags:
- hr
- compensation
- workday
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: compensation-review
port: 8080
tools:
- name: run-compensation-review
description: "Compare employee compensation against market benchmarks and publish a summary to Confluence."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: job_profile
in: body
type: string
description: "The job profile code for benchmark comparison."
- name: confluence_space
in: body
type: string
description: "The Confluence space key for the HR team."
steps:
- name: get-compensation
type: call
call: "workday.get-compensation"
with:
worker_id: "{{worker_id}}"
- name: get-benchmark
type: call
call: "snowflake.execute-sql"
with:
warehouse: "EY_HR_WH"
database: "COMPENSATION_DB"
statement: "SELECT median_salary, p75_salary FROM market_benchmarks WHERE job_profile = '{{job_profile}}'"
- name: publish-review
type: call
call: "confluence.create-page"
with:
space_key: "{{confluence_space}}"
title: "Compensation Review - {{get-compensation.employee_name}}"
body: "Current base: {{get-compensation.base_salary}}. Market median: {{get-benchmark.data[0][0]}}. Market P75: {{get-benchmark.data[0][1]}}."
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
- type: http
namespace: snowflake
baseUri: "https://ey-partner.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-sql
method: POST
- type: http
namespace: confluence
baseUri: "https://ey-collab.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
Retrieves employee profile details from Workday by worker ID and logs the lookup in ServiceNow for audit trail compliance. Used by engagement teams to look up staff availability, skills, and current assignments.
naftiko: "0.5"
info:
label: "Workday Employee Directory Lookup"
description: "Retrieves employee profile details from Workday by worker ID and logs the lookup in ServiceNow for audit trail compliance. Used by engagement teams to look up staff availability, skills, and current assignments."
tags:
- hr
- workday
- employee-directory
- staffing
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-directory
port: 8080
tools:
- name: get-employee-profile
description: "Look up a Workday employee profile by worker ID and log the access in ServiceNow."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: requestor_email
in: body
type: string
description: "Email of the person requesting the lookup."
steps:
- name: fetch-worker
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: log-access
type: call
call: "servicenow.create-record"
with:
table: "x_ey_access_log"
worker_id: "{{worker_id}}"
requestor: "{{requestor_email}}"
accessed_name: "{{fetch-worker.full_name}}"
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: servicenow
baseUri: "https://ey.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves employee profile from Workday for EY.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves employee profile from Workday for EY."
tags:
- hr
- workday
- employee-directory
capability:
exposes:
- type: mcp
namespace: workday-profile
port: 8080
tools:
- name: get-employee-profile
description: "Look up EY employee in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "workday.get-worker"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: name
type: string
mapping: "$.worker.name"
- name: title
type: string
mapping: "$.worker.title"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5.ey.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
Submits time entries for EY professionals against engagement codes in Workday and sends a confirmation message via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Time Entry Submission"
description: "Submits time entries for EY professionals against engagement codes in Workday and sends a confirmation message via Microsoft Teams."
tags:
- hr
- time-tracking
- workday
- engagement
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: time-entry
port: 8080
tools:
- name: submit-time-entry
description: "Submit a time entry in Workday and send a Teams confirmation."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
- name: engagement_code
in: body
type: string
description: "The engagement billing code."
- name: hours
in: body
type: string
description: "Number of hours to log."
- name: work_date
in: body
type: string
description: "The date worked in YYYY-MM-DD format."
- name: worker_email
in: body
type: string
description: "The employee email for Teams confirmation."
steps:
- name: log-time
type: call
call: "workday.submit-time"
with:
worker_id: "{{worker_id}}"
engagement_code: "{{engagement_code}}"
hours: "{{hours}}"
work_date: "{{work_date}}"
- name: confirm-entry
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{worker_email}}"
text: "Time entry confirmed: {{hours}} hours logged to {{engagement_code}} for {{work_date}}. Entry ID: {{log-time.time_entry_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: time-entries
path: "/workers/{{worker_id}}/timeEntries"
inputParameters:
- name: worker_id
in: path
operations:
- name: submit-time
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves a Zoom webinar attendance report and exports the participant list to Google Sheets for CPE credit tracking by EY learning and development teams.
naftiko: "0.5"
info:
label: "Zoom Webinar Attendance Report"
description: "Retrieves a Zoom webinar attendance report and exports the participant list to Google Sheets for CPE credit tracking by EY learning and development teams."
tags:
- learning
- zoom
- reporting
- cpe
- google-sheets
capability:
exposes:
- type: mcp
namespace: webinar-attendance
port: 8080
tools:
- name: get-webinar-attendance
description: "Retrieve Zoom webinar attendance and export participants to Google Sheets."
inputParameters:
- name: webinar_id
in: body
type: string
description: "The Zoom webinar ID."
- name: spreadsheet_id
in: body
type: string
description: "The Google Sheets spreadsheet ID for attendance export."
steps:
- name: fetch-attendance
type: call
call: "zoom.get-webinar-report"
with:
webinar_id: "{{webinar_id}}"
- name: export-to-sheets
type: call
call: "googlesheets.update-values"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "Attendance!A1"
values: "{{fetch-attendance.participants}}"
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: webinar-reports
path: "/report/webinars/{{webinar_id}}/participants"
inputParameters:
- name: webinar_id
in: path
operations:
- name: get-webinar-report
method: GET
- type: http
namespace: googlesheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: update-values
method: PUT