McKinsey & Company Capabilities

Naftiko 0.5 capability definitions for McKinsey & Company - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Pulls Adobe Analytics report data for McKinsey.com, ingests it into Databricks for processing, and notifies the analytics team via Slack when the pipeline completes.

naftiko: "0.5"
info:
  label: "Adobe Analytics to Databricks Data Pipeline"
  description: "Pulls Adobe Analytics report data for McKinsey.com, ingests it into Databricks for processing, and notifies the analytics team via Slack when the pipeline completes."
  tags:
    - analytics
    - data-engineering
    - adobe-analytics
    - databricks
    - slack
capability:
  exposes:
    - type: mcp
      namespace: adobe-databricks-pipeline
      port: 8080
      tools:
        - name: run-adobe-pipeline
          description: "Pull Adobe Analytics data, ingest into Databricks, and notify via Slack."
          inputParameters:
            - name: report_suite_id
              in: body
              type: string
              description: "Adobe Analytics report suite ID."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          steps:
            - name: get-report
              type: call
              call: "adobe.get-report"
              with:
                rsid: "{{report_suite_id}}"
                dateFrom: "{{start_date}}"
                dateTo: "{{end_date}}"
                metrics: "pageviews,visits,uniqueVisitors"
            - name: ingest-data
              type: call
              call: "databricks.run-job"
              with:
                job_id: "adobe-analytics-ingestion"
                notebook_params: "{\"rsid\": \"{{report_suite_id}}\", \"start\": \"{{start_date}}\", \"end\": \"{{end_date}}\"}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "analytics-engineering"
                text: "Adobe Analytics data pipeline complete for {{report_suite_id}} ({{start_date}} to {{end_date}}). Databricks run: {{ingest-data.run_id}}."
  consumes:
    - type: http
      namespace: adobe
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      inputParameters:
        - name: x-api-key
          in: header
          value: "$secrets.adobe_api_key"
      resources:
        - name: reports
          path: "/{{rsid}}/reports"
          inputParameters:
            - name: rsid
              in: path
          operations:
            - name: get-report
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://mckinsey.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-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

Archives engagement documents by moving files to a Box archive folder, creating an index page in Confluence, and notifying the document management team via Slack.

naftiko: "0.5"
info:
  label: "Box Document Archive with Confluence Index"
  description: "Archives engagement documents by moving files to a Box archive folder, creating an index page in Confluence, and notifying the document management team via Slack."
  tags:
    - document-management
    - archiving
    - box
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: doc-archive
      port: 8080
      tools:
        - name: archive-documents
          description: "Archive Box files, create Confluence index, and notify via Slack."
          inputParameters:
            - name: source_folder_id
              in: body
              type: string
              description: "Box source folder ID."
            - name: archive_folder_id
              in: body
              type: string
              description: "Box archive folder ID."
            - name: engagement_name
              in: body
              type: string
              description: "Engagement name for indexing."
            - name: space_key
              in: body
              type: string
              description: "Confluence space key."
          steps:
            - name: list-files
              type: call
              call: "box.list-folder"
              with:
                folder_id: "{{source_folder_id}}"
            - name: move-files
              type: call
              call: "box.move-folder"
              with:
                folder_id: "{{source_folder_id}}"
                parent_id: "{{archive_folder_id}}"
            - name: create-index
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{space_key}}"
                title: "Document Archive: {{engagement_name}}"
                body: "<h2>Archived Documents</h2><p>{{list-files.total_count}} files archived from engagement {{engagement_name}}.</p>"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "document-management"
                text: "{{list-files.total_count}} documents archived for {{engagement_name}}. Index: {{create-index.url}}"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders/{{folder_id}}/items"
          inputParameters:
            - name: folder_id
              in: path
          operations:
            - name: list-folder
              method: GET
        - name: folder-ops
          path: "/folders/{{folder_id}}"
          inputParameters:
            - name: folder_id
              in: path
          operations:
            - name: move-folder
              method: PUT
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Runs client due diligence by pulling company data from ZoomInfo, financial data from Bloomberg, checking internal conflicts in Salesforce, and generating a due diligence report in Confluence.

naftiko: "0.5"
info:
  label: "Client Due Diligence Orchestrator"
  description: "Runs client due diligence by pulling company data from ZoomInfo, financial data from Bloomberg, checking internal conflicts in Salesforce, and generating a due diligence report in Confluence."
  tags:
    - consulting
    - due-diligence
    - zoominfo
    - bloomberg
    - salesforce
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: due-diligence
      port: 8080
      tools:
        - name: run-due-diligence
          description: "Run client due diligence across ZoomInfo, Bloomberg, Salesforce, and Confluence."
          inputParameters:
            - name: company_domain
              in: body
              type: string
              description: "Company website domain."
            - name: company_ticker
              in: body
              type: string
              description: "Bloomberg ticker symbol."
            - name: engagement_space_key
              in: body
              type: string
              description: "Confluence space key for the engagement."
          steps:
            - name: enrich-company
              type: call
              call: "zoominfo.enrich-company"
              with:
                companyWebsite: "{{company_domain}}"
            - name: get-financials
              type: call
              call: "bloomberg.get-company-data"
              with:
                ticker: "{{company_ticker}}"
                fields: "REVENUE,NET_INCOME,TOTAL_DEBT,MARKET_CAP"
            - name: check-conflicts
              type: call
              call: "salesforce.query-accounts"
              with:
                q: "SELECT Id, Name, Conflict_Status__c FROM Account WHERE Website='{{company_domain}}'"
            - name: generate-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{engagement_space_key}}"
                title: "Due Diligence: {{enrich-company.company_name}}"
                body: "<h2>Company Profile</h2><p>Revenue: {{get-financials.REVENUE}}</p><p>Employees: {{enrich-company.employee_count}}</p><p>Industry: {{enrich-company.industry}}</p><h2>Conflict Check</h2><p>{{check-conflicts.totalSize}} existing accounts found.</p>"
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: enrich
          path: "/enrich/company"
          operations:
            - name: enrich-company
              method: POST
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: companies
          path: "/company/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
            - name: fields
              in: query
          operations:
            - name: get-company-data
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-accounts
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

When a new client engagement is created in Salesforce, provisions a SharePoint site, creates a Slack channel, sets up a Confluence project space, and notifies the engagement team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Client Engagement Kickoff Orchestrator"
  description: "When a new client engagement is created in Salesforce, provisions a SharePoint site, creates a Slack channel, sets up a Confluence project space, and notifies the engagement team via Microsoft Teams."
  tags:
    - consulting
    - client-engagement
    - salesforce
    - sharepoint
    - slack
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: engagement-kickoff
      port: 8080
      tools:
        - name: kickoff-engagement
          description: "Given a Salesforce opportunity ID, orchestrate the full engagement kickoff across SharePoint, Slack, Confluence, and Microsoft Teams."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID for the new engagement."
            - name: engagement_name
              in: body
              type: string
              description: "Human-readable name for the engagement."
            - name: partner_email
              in: body
              type: string
              description: "Email of the lead engagement partner."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-site
              type: call
              call: "sharepoint.create-site"
              with:
                site_name: "ENG-{{engagement_name}}"
                owner_email: "{{partner_email}}"
            - name: create-channel
              type: call
              call: "slack.create-channel"
              with:
                channel_name: "eng-{{engagement_name}}"
                purpose: "Engagement: {{get-opportunity.account_name}} - {{engagement_name}}"
            - name: create-space
              type: call
              call: "confluence.create-space"
              with:
                space_key: "ENG{{opportunity_id}}"
                space_name: "{{engagement_name}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "engagement-managers"
                text: "New engagement launched: {{engagement_name}} for {{get-opportunity.account_name}}. SharePoint: {{create-site.url}} | Slack: #{{create-channel.name}} | Confluence: {{create-space.url}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: sites
          path: "/"
          operations:
            - name: create-site
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: channels
          path: "/conversations.create"
          operations:
            - name: create-channel
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: spaces
          path: "/space"
          operations:
            - name: create-space
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a Google Form client feedback submission arrives, parses the response, logs it in Salesforce as a survey record, generates a summary in Confluence, and alerts the engagement partner via Slack.

naftiko: "0.5"
info:
  label: "Client Feedback Intake Pipeline"
  description: "When a Google Form client feedback submission arrives, parses the response, logs it in Salesforce as a survey record, generates a summary in Confluence, and alerts the engagement partner via Slack."
  tags:
    - client-experience
    - feedback
    - google-forms
    - salesforce
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: feedback-intake
      port: 8080
      tools:
        - name: process-feedback
          description: "Process a client feedback form submission: log in Salesforce, summarize in Confluence, alert via Slack."
          inputParameters:
            - name: form_response_id
              in: body
              type: string
              description: "Google Form response ID."
            - name: form_id
              in: body
              type: string
              description: "Google Form ID."
            - name: engagement_id
              in: body
              type: string
              description: "Associated engagement ID."
            - name: partner_channel
              in: body
              type: string
              description: "Slack channel for the engagement partner."
          steps:
            - name: get-response
              type: call
              call: "gforms.get-response"
              with:
                form_id: "{{form_id}}"
                response_id: "{{form_response_id}}"
            - name: log-feedback
              type: call
              call: "salesforce.create-survey"
              with:
                Engagement__c: "{{engagement_id}}"
                Overall_Rating__c: "{{get-response.answers.rating}}"
                Comments__c: "{{get-response.answers.comments}}"
            - name: create-summary
              type: call
              call: "confluence.create-page"
              with:
                space_key: "FEEDBACK"
                title: "Client Feedback - {{engagement_id}} - {{get-response.respondentEmail}}"
                body: "Rating: {{get-response.answers.rating}}. Comments: {{get-response.answers.comments}}"
            - name: alert-partner
              type: call
              call: "slack.post-message"
              with:
                channel: "{{partner_channel}}"
                text: "New client feedback for engagement {{engagement_id}}: Rating {{get-response.answers.rating}}/5. Details: {{create-summary.url}}"
  consumes:
    - type: http
      namespace: gforms
      baseUri: "https://forms.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: responses
          path: "/forms/{{form_id}}/responses/{{response_id}}"
          inputParameters:
            - name: form_id
              in: path
            - name: response_id
              in: path
          operations:
            - name: get-response
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: surveys
          path: "/sobjects/Survey_Response__c"
          operations:
            - name: create-survey
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Assembles a client proposal by pulling the opportunity from Salesforce, retrieving relevant case studies from Confluence, generating a slide deck outline in Google Slides, and notifying the proposal team via Slack.

naftiko: "0.5"
info:
  label: "Client Proposal Generation Pipeline"
  description: "Assembles a client proposal by pulling the opportunity from Salesforce, retrieving relevant case studies from Confluence, generating a slide deck outline in Google Slides, and notifying the proposal team via Slack."
  tags:
    - consulting
    - proposals
    - salesforce
    - confluence
    - google-slides
    - slack
capability:
  exposes:
    - type: mcp
      namespace: proposal-pipeline
      port: 8080
      tools:
        - name: generate-proposal
          description: "Given a Salesforce opportunity ID and industry, assemble a proposal pulling case studies and creating a slide deck."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "Salesforce opportunity ID."
            - name: industry
              in: body
              type: string
              description: "Industry vertical for case study matching."
            - name: proposal_lead
              in: body
              type: string
              description: "Email of the proposal lead."
          steps:
            - name: get-opp
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: find-cases
              type: call
              call: "confluence.search-content"
              with:
                cql: "type=page AND label=\"case-study\" AND label=\"{{industry}}\""
                limit: "5"
            - name: create-deck
              type: call
              call: "gslides.create-presentation"
              with:
                title: "Proposal: {{get-opp.account_name}} - {{get-opp.stage}}"
            - name: notify-lead
              type: call
              call: "slack.post-message"
              with:
                channel: "proposals"
                text: "Proposal deck created for {{get-opp.account_name}}: {{create-deck.url}}. {{find-cases.totalSize}} case studies found for {{industry}}. Lead: {{proposal_lead}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: search
          path: "/search"
          inputParameters:
            - name: cql
              in: query
            - name: limit
              in: query
          operations:
            - name: search-content
              method: GET
    - type: http
      namespace: gslides
      baseUri: "https://slides.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: presentations
          path: "/presentations"
          operations:
            - name: create-presentation
              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

Prepares a client workshop by scheduling a Zoom meeting, creating a shared Google Drive folder, uploading pre-read materials, creating a Confluence agenda page, and sending invitations via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Client Workshop Orchestrator"
  description: "Prepares a client workshop by scheduling a Zoom meeting, creating a shared Google Drive folder, uploading pre-read materials, creating a Confluence agenda page, and sending invitations via Microsoft Outlook."
  tags:
    - consulting
    - workshops
    - zoom
    - google-drive
    - confluence
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: workshop-prep
      port: 8080
      tools:
        - name: prepare-workshop
          description: "Prepare a client workshop: schedule Zoom, create Drive folder, set up Confluence agenda, and send invitations."
          inputParameters:
            - name: workshop_title
              in: body
              type: string
              description: "Title of the workshop."
            - name: date_time
              in: body
              type: string
              description: "Workshop date and time in ISO 8601 format."
            - name: duration_minutes
              in: body
              type: integer
              description: "Duration in minutes."
            - name: attendee_emails
              in: body
              type: string
              description: "Comma-separated attendee emails."
            - name: engagement_space_key
              in: body
              type: string
              description: "Confluence space key for the engagement."
          steps:
            - name: create-meeting
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "{{workshop_title}}"
                start_time: "{{date_time}}"
                duration: "{{duration_minutes}}"
            - name: create-folder
              type: call
              call: "gdrive.create-folder"
              with:
                parent_id: "workshops-root"
                name: "{{workshop_title}}"
            - name: create-agenda
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{engagement_space_key}}"
                title: "Workshop Agenda: {{workshop_title}}"
                body: "<h2>Workshop: {{workshop_title}}</h2><p>Zoom: {{create-meeting.join_url}}</p><p>Materials: {{create-folder.webViewLink}}</p>"
            - name: send-invites
              type: call
              call: "msgraph.send-mail"
              with:
                sender: "workshops@mckinsey.com"
                to: "{{attendee_emails}}"
                subject: "Workshop Invitation: {{workshop_title}}"
                body: "You are invited to {{workshop_title}} on {{date_time}}. Zoom: {{create-meeting.join_url}}. Agenda: {{create-agenda.url}}. Materials: {{create-folder.webViewLink}}"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: meetings
          path: "/users/me/meetings"
          operations:
            - name: create-meeting
              method: POST
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/{{sender}}/sendMail"
          inputParameters:
            - name: sender
              in: path
          operations:
            - name: send-mail
              method: POST

Aggregates competitive intelligence by searching Bloomberg for financial data, querying LinkedIn for organizational changes, checking Confluence for internal analysis, and consolidating findings in a Google Sheets tracker.

naftiko: "0.5"
info:
  label: "Competitive Intelligence Aggregator"
  description: "Aggregates competitive intelligence by searching Bloomberg for financial data, querying LinkedIn for organizational changes, checking Confluence for internal analysis, and consolidating findings in a Google Sheets tracker."
  tags:
    - research
    - competitive-intelligence
    - bloomberg
    - linkedin
    - confluence
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: competitive-intel
      port: 8080
      tools:
        - name: aggregate-intel
          description: "Aggregate competitive intelligence from Bloomberg, LinkedIn, and Confluence into a Google Sheets tracker."
          inputParameters:
            - name: company_ticker
              in: body
              type: string
              description: "Bloomberg ticker symbol for the target company."
            - name: linkedin_org_id
              in: body
              type: string
              description: "LinkedIn organization ID."
            - name: tracker_spreadsheet_id
              in: body
              type: string
              description: "Google Sheets tracker spreadsheet ID."
          steps:
            - name: get-financials
              type: call
              call: "bloomberg.get-company-data"
              with:
                ticker: "{{company_ticker}}"
                fields: "REVENUE,NET_INCOME,MARKET_CAP,EBITDA"
            - name: get-org-updates
              type: call
              call: "linkedin.get-organization"
              with:
                organization_id: "{{linkedin_org_id}}"
            - name: get-internal-analysis
              type: call
              call: "confluence.search-content"
              with:
                cql: "type=page AND label=\"competitive-analysis\" AND text~\"{{company_ticker}}\""
                limit: "10"
            - name: update-tracker
              type: call
              call: "gsheets.append-values"
              with:
                spreadsheet_id: "{{tracker_spreadsheet_id}}"
                range: "CompetitiveIntel!A1"
                values: "[\"{{company_ticker}}\", \"{{get-financials.REVENUE}}\", \"{{get-financials.MARKET_CAP}}\", \"{{get-org-updates.staffCount}}\", \"{{get-internal-analysis.totalSize}} internal articles\"]"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: companies
          path: "/company/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
            - name: fields
              in: query
          operations:
            - name: get-company-data
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: organizations
          path: "/organizations/{{organization_id}}"
          inputParameters:
            - name: organization_id
              in: path
          operations:
            - name: get-organization
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: search
          path: "/search"
          inputParameters:
            - name: cql
              in: query
            - name: limit
              in: query
          operations:
            - name: search-content
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: values
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-values
              method: POST

When a staffing request is submitted, searches Workday for available consultants by skill and office, creates a staffing ticket in ServiceNow, and posts the opportunity to the internal Slack staffing channel.

naftiko: "0.5"
info:
  label: "Consultant Staffing Request Pipeline"
  description: "When a staffing request is submitted, searches Workday for available consultants by skill and office, creates a staffing ticket in ServiceNow, and posts the opportunity to the internal Slack staffing channel."
  tags:
    - talent
    - staffing
    - workday
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: staffing-request
      port: 8080
      tools:
        - name: submit-staffing-request
          description: "Submit a staffing request by skill set and office. Searches Workday, creates a ServiceNow ticket, and posts to Slack."
          inputParameters:
            - name: engagement_id
              in: body
              type: string
              description: "The engagement identifier."
            - name: required_skills
              in: body
              type: string
              description: "Comma-separated list of required skills."
            - name: office
              in: body
              type: string
              description: "Preferred office location."
            - name: start_date
              in: body
              type: string
              description: "Required start date in YYYY-MM-DD format."
          steps:
            - name: search-consultants
              type: call
              call: "workday.search-workers"
              with:
                skills: "{{required_skills}}"
                location: "{{office}}"
                availability_date: "{{start_date}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Staffing request for engagement {{engagement_id}}"
                description: "Skills: {{required_skills}}. Office: {{office}}. Start: {{start_date}}. Candidates found: {{search-consultants.total}}."
                category: "staffing"
            - name: post-opportunity
              type: call
              call: "slack.post-message"
              with:
                channel: "staffing-opportunities"
                text: "Staffing need for engagement {{engagement_id}}: {{required_skills}} in {{office}} starting {{start_date}}. Ticket: {{create-ticket.number}}. {{search-consultants.total}} candidates identified."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers"
          inputParameters:
            - name: skills
              in: query
            - name: location
              in: query
            - name: availability_date
              in: query
          operations:
            - name: search-workers
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: 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

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 1"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-1
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-1"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-1
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 10"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-10
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-10"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-10
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://mckinsey.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 11"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-11
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-11"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 11 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-11
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 12"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-12
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-12"
              with:
                identifier: "{{identifier}}"
            - name: push
              type: call
              call: "datadog.submit-metrics"
              with:
                metric_name: "consulting.workflow_12"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-12
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_token"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: submit-metrics
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 13"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-13
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-13"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-13
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 14"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-14
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-14"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-14
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 15"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-15
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-15"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#consulting"
                text: "Completed workflow 15: {{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-15
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 16"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-16
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-16"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "CONSUL"
                title: "Report 16"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-16
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 17"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-17
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-17"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_17"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-17
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 18"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-18
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-18"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CONS"
                summary: "Task from workflow 18"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-18
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mckinsey.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 19"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-19
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-19"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "consulting"
                message: "Workflow 19 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-19
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 2"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-2
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-2"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-2
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 20"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-20
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-20"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_20"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-20
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://mckinsey-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 21"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-21
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-21"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-21
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 22"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-22
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-22"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-22
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://mckinsey.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 23"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-23
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-23"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 23 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-23
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 24"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-24
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-24"
              with:
                identifier: "{{identifier}}"
            - name: push
              type: call
              call: "datadog.submit-metrics"
              with:
                metric_name: "consulting.workflow_24"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-24
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_token"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: submit-metrics
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 25"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-25
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-25"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "salesforce.create-account"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-25
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 26"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-26
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-26"
              with:
                identifier: "{{identifier}}"
            - name: create
              type: call
              call: "servicenow.create-incident"
              with:
                data: "{{process.result}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-26
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now/v1"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 27"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-27
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-27"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#consulting"
                text: "Completed workflow 27: {{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-27
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 28"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-28
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-28"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "CONSUL"
                title: "Report 28"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-28
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 29"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-29
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-29"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_29"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-29
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 3"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - slack
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-3
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-3"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#consulting"
                text: "Completed workflow 3: {{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-3
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: post-message
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 30"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-30
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-30"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CONS"
                summary: "Task from workflow 30"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-30
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mckinsey.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 31"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-31
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-31"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "consulting"
                message: "Workflow 31 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-31
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 32"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-32
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-32"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_32"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-32
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://mckinsey-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 33"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-33
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-33"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-33
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 34"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-34
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-34"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "sharepoint.upload-document"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-34
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://mckinsey.sharepoint.com/_api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.sharepoint_token"
      resources:
        - name: documents
          path: "/documents"
          operations:
            - name: upload-document
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 35"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-35
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-35"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "hubspot.send-email"
              with:
                to: "{{process.email}}"
                subject: "Workflow 35 Complete"
                body: "{{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-35
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/contacts"
          operations:
            - name: send-email
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 4"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-4
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-4"
              with:
                identifier: "{{identifier}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space: "CONSUL"
                title: "Report 4"
                content: "{{process.report}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-4
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 5"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-5
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-5"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "workflow_5"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-5
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 6"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - jira
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-6
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-6"
              with:
                identifier: "{{identifier}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "CONS"
                summary: "Task from workflow 6"
                description: "{{process.details}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-6
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://mckinsey.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issues"
          operations:
            - name: create-issue
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 7"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - teams
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-7
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-7"
              with:
                identifier: "{{identifier}}"
            - name: notify
              type: call
              call: "teams.send-message"
              with:
                channel_id: "consulting"
                message: "Workflow 7 complete: {{process.summary}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-7
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 8"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-8
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-8"
              with:
                identifier: "{{identifier}}"
            - name: refresh
              type: call
              call: "tableau.publish-datasource"
              with:
                dataset_id: "workflow_8"
                data: "{{process.metrics}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-8
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://mckinsey-tableau.online.tableau.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/datasources"
          operations:
            - name: publish-datasource
              method: POST

Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey.

naftiko: "0.5"
info:
  label: "Mckinsey Workflow 9"
  description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
  tags:
    - consulting
    - operations
    - box
capability:
  exposes:
    - type: mcp
      namespace: consulting
      port: 8080
      tools:
        - name: mckinsey-workflow-9
          description: "Orchestrates consulting operations including data retrieval, processing, and automated notification for Mckinsey."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Primary identifier for this workflow"
          steps:
            - name: process
              type: call
              call: "mckinsey-ops.run-workflow-9"
              with:
                identifier: "{{identifier}}"
            - name: upload
              type: call
              call: "box.upload-file"
              with:
                content: "{{process.document}}"
  consumes:
    - type: http
      namespace: mckinsey-ops
      baseUri: "https://api.mckinsey.com/operations/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: operations
          path: "/operations"
          operations:
            - name: run-workflow-9
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 1"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-1
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-1"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-1
          path: "/data-1/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-1
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 10"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-10
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-10"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-10
          path: "/data-10/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-10
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 11"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-11
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-11"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-11
          path: "/data-11/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-11
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 12"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-12
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-12"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-12
          path: "/data-12/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-12
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 13"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-13
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-13"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-13
          path: "/data-13/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-13
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 14"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-14
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-14"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-14
          path: "/data-14/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-14
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 15"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-15
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-15"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-15
          path: "/data-15/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-15
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 2"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-2
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-2"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-2
          path: "/data-2/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-2
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 3"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-3
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-3"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-3
          path: "/data-3/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-3
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 4"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-4
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-4"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-4
          path: "/data-4/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-4
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 5"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-5
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-5"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-5
          path: "/data-5/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-5
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 6"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-6
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-6"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-6
          path: "/data-6/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-6
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 7"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-7
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-7"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-7
          path: "/data-7/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-7
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 8"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-8
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-8"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-8
          path: "/data-8/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-8
              method: GET

Retrieves operational data for Mckinsey consulting workflows.

naftiko: "0.5"
info:
  label: "Mckinsey Data Lookup 9"
  description: "Retrieves operational data for Mckinsey consulting workflows."
  tags:
    - consulting
    - operations
capability:
  exposes:
    - type: mcp
      namespace: mckinsey-data
      port: 8080
      tools:
        - name: get-data-9
          description: "Retrieves operational data for Mckinsey consulting workflows."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "Resource identifier"
          call: "mckinsey-data.get-data-9"
          with:
            identifier: "{{identifier}}"
  consumes:
    - type: http
      namespace: mckinsey-data
      baseUri: "https://api.mckinsey.com/data/v1"
      authentication:
        type: bearer
        token: "$secrets.mckinsey_api_token"
      resources:
        - name: data-9
          path: "/data-9/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-data-9
              method: GET

Sets up a McKinsey event by creating the event in Cvent, generating a Confluence event page, scheduling reminders via Microsoft Teams, and posting the announcement to Slack.

naftiko: "0.5"
info:
  label: "Cvent Event Setup Pipeline"
  description: "Sets up a McKinsey event by creating the event in Cvent, generating a Confluence event page, scheduling reminders via Microsoft Teams, and posting the announcement to Slack."
  tags:
    - events
    - conferences
    - cvent
    - confluence
    - microsoft-teams
    - slack
capability:
  exposes:
    - type: mcp
      namespace: event-setup
      port: 8080
      tools:
        - name: setup-event
          description: "Set up an event across Cvent, Confluence, Teams, and Slack."
          inputParameters:
            - name: event_name
              in: body
              type: string
              description: "Name of the event."
            - name: event_date
              in: body
              type: string
              description: "Event date in ISO 8601 format."
            - name: venue
              in: body
              type: string
              description: "Event venue."
            - name: organizer_email
              in: body
              type: string
              description: "Organizer email."
          steps:
            - name: create-event
              type: call
              call: "cvent.create-event"
              with:
                name: "{{event_name}}"
                date: "{{event_date}}"
                venue: "{{venue}}"
            - name: create-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "EVENTS"
                title: "{{event_name}} - {{event_date}}"
                body: "<h2>{{event_name}}</h2><p>Date: {{event_date}}</p><p>Venue: {{venue}}</p><p>Registration: {{create-event.registration_url}}</p>"
            - name: schedule-reminder
              type: call
              call: "msgraph.create-event"
              with:
                organizer: "{{organizer_email}}"
                subject: "Reminder: {{event_name}}"
                start: "{{event_date}}"
                end: "{{event_date}}"
                attendees: "{{organizer_email}}"
            - name: announce
              type: call
              call: "slack.post-message"
              with:
                channel: "events"
                text: "New event: {{event_name}} on {{event_date}} at {{venue}}. Register: {{create-event.registration_url}}. Details: {{create-page.url}}"
  consumes:
    - type: http
      namespace: cvent
      baseUri: "https://api-platform.cvent.com/ea"
      authentication:
        type: bearer
        token: "$secrets.cvent_token"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msgraph
      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
    - 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

Triggers a Databricks job run for a specified job ID. Used by data science teams to execute analytics pipelines for client engagements.

naftiko: "0.5"
info:
  label: "Databricks Analytics Job Runner"
  description: "Triggers a Databricks job run for a specified job ID. Used by data science teams to execute analytics pipelines for client engagements."
  tags:
    - analytics
    - data-science
    - databricks
capability:
  exposes:
    - type: mcp
      namespace: databricks-jobs
      port: 8080
      tools:
        - name: run-job
          description: "Trigger a Databricks job run by job ID with optional parameters."
          inputParameters:
            - name: job_id
              in: body
              type: string
              description: "Databricks job ID."
            - name: notebook_params
              in: body
              type: string
              description: "JSON string of notebook parameters."
          call: "databricks.run-job"
          with:
            job_id: "{{job_id}}"
            notebook_params: "{{notebook_params}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://mckinsey.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST

Triggers a Databricks analytics job, waits for completion, refreshes the associated Tableau dashboard, and shares the results in Slack.

naftiko: "0.5"
info:
  label: "Databricks Pipeline with Tableau Visualization"
  description: "Triggers a Databricks analytics job, waits for completion, refreshes the associated Tableau dashboard, and shares the results in Slack."
  tags:
    - analytics
    - data-science
    - databricks
    - tableau
    - slack
capability:
  exposes:
    - type: mcp
      namespace: analytics-pipeline
      port: 8080
      tools:
        - name: run-analytics-pipeline
          description: "Run a Databricks job, refresh Tableau, and share results via Slack."
          inputParameters:
            - name: job_id
              in: body
              type: string
              description: "Databricks job ID."
            - name: workbook_id
              in: body
              type: string
              description: "Tableau workbook ID to refresh."
            - name: results_channel
              in: body
              type: string
              description: "Slack channel for results."
          steps:
            - name: run-job
              type: call
              call: "databricks.run-job"
              with:
                job_id: "{{job_id}}"
            - name: refresh-viz
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "{{workbook_id}}"
            - name: share-results
              type: call
              call: "slack.post-message"
              with:
                channel: "{{results_channel}}"
                text: "Analytics pipeline complete. Databricks run: {{run-job.run_id}}. Dashboard refreshed: {{refresh-viz.url}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://mckinsey.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.mckinsey.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/mckinsey-main/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              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 health status of a monitored service in Datadog by service name. Returns current status, uptime percentage, and active alerts. Used by engineering teams to monitor internal platforms.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Retrieves the health status of a monitored service in Datadog by service name. Returns current status, uptime percentage, and active alerts. Used by engineering teams to monitor internal platforms."
  tags:
    - monitoring
    - devops
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: service-health
      port: 8080
      tools:
        - name: check-service-health
          description: "Check Datadog health status for a service. Returns status, uptime, and active alerts."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "Name of the service to check."
          call: "datadog.get-service-status"
          with:
            service: "{{service_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.overall_status"
            - name: uptime
              type: string
              mapping: "$.uptime_percentage"
            - name: active_alerts
              type: integer
              mapping: "$.alert_count"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: synthetics
          path: "/synthetics/tests"
          inputParameters:
            - name: service
              in: query
          operations:
            - name: get-service-status
              method: GET

Searches the McKinsey internal knowledge index in Elasticsearch by query string. Returns ranked results with titles, excerpts, and relevance scores.

naftiko: "0.5"
info:
  label: "Elasticsearch Knowledge Search"
  description: "Searches the McKinsey internal knowledge index in Elasticsearch by query string. Returns ranked results with titles, excerpts, and relevance scores."
  tags:
    - knowledge-management
    - search
    - elasticsearch
capability:
  exposes:
    - type: mcp
      namespace: es-search
      port: 8080
      tools:
        - name: search-knowledge-base
          description: "Search the Elasticsearch knowledge index by query. Returns ranked results."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Search query string."
            - name: max_results
              in: body
              type: integer
              description: "Maximum results to return."
          call: "elasticsearch.search"
          with:
            index: "knowledge-base"
            q: "{{query}}"
            size: "{{max_results}}"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://es.mckinsey.com"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token"
      resources:
        - name: search
          path: "/{{index}}/_search"
          inputParameters:
            - name: index
              in: path
            - name: q
              in: query
            - name: size
              in: query
          operations:
            - name: search
              method: GET

On engagement completion, updates the Salesforce opportunity to Closed Won, archives the Confluence space, sends a closeout summary to Slack, and triggers a client feedback survey via Microsoft Graph.

naftiko: "0.5"
info:
  label: "Engagement Closeout Orchestrator"
  description: "On engagement completion, updates the Salesforce opportunity to Closed Won, archives the Confluence space, sends a closeout summary to Slack, and triggers a client feedback survey via Microsoft Graph."
  tags:
    - consulting
    - engagement-lifecycle
    - salesforce
    - confluence
    - slack
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: engagement-closeout
      port: 8080
      tools:
        - name: close-engagement
          description: "Close an engagement by updating Salesforce, archiving Confluence, notifying Slack, and sending a feedback survey."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "Salesforce opportunity ID."
            - name: space_key
              in: body
              type: string
              description: "Confluence space key for the engagement."
            - name: client_email
              in: body
              type: string
              description: "Client contact email for the feedback survey."
            - name: engagement_name
              in: body
              type: string
              description: "Name of the engagement."
          steps:
            - name: update-opp
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
                StageName: "Closed Won"
            - name: archive-space
              type: call
              call: "confluence.archive-space"
              with:
                space_key: "{{space_key}}"
            - name: send-survey
              type: call
              call: "msgraph.send-mail"
              with:
                to: "{{client_email}}"
                subject: "McKinsey Engagement Feedback: {{engagement_name}}"
                body: "Thank you for partnering with McKinsey on {{engagement_name}}. Please complete our brief feedback survey to help us improve."
            - name: notify-closeout
              type: call
              call: "slack.post-message"
              with:
                channel: "engagement-closeouts"
                text: "Engagement {{engagement_name}} ({{opportunity_id}}) closed. Confluence archived. Feedback survey sent to {{client_email}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: update-opportunity
              method: PATCH
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: spaces
          path: "/space/{{space_key}}"
          inputParameters:
            - name: space_key
              in: path
          operations:
            - name: archive-space
              method: PUT
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/noreply@mckinsey.com/sendMail"
          operations:
            - name: send-mail
              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

Builds an engagement health dashboard by pulling active engagements from Salesforce, expenses from SAP Concur, time tracking from Workday, and rendering the dashboard in Tableau with a Slack notification.

naftiko: "0.5"
info:
  label: "Engagement Health Dashboard Pipeline"
  description: "Builds an engagement health dashboard by pulling active engagements from Salesforce, expenses from SAP Concur, time tracking from Workday, and rendering the dashboard in Tableau with a Slack notification."
  tags:
    - consulting
    - reporting
    - salesforce
    - sap-concur
    - workday
    - tableau
    - slack
capability:
  exposes:
    - type: mcp
      namespace: engagement-health
      port: 8080
      tools:
        - name: build-health-dashboard
          description: "Build an engagement health dashboard from Salesforce, Concur, Workday, and Tableau."
          inputParameters:
            - name: practice_area
              in: body
              type: string
              description: "Practice area to report on."
            - name: reporting_period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-Q1)."
          steps:
            - name: get-engagements
              type: call
              call: "salesforce.query-opportunities"
              with:
                q: "SELECT Id, Name, Amount, StageName FROM Opportunity WHERE StageName='Active' AND Practice__c='{{practice_area}}'"
            - name: get-expenses
              type: call
              call: "concur.list-reports"
              with:
                practice: "{{practice_area}}"
                period: "{{reporting_period}}"
            - name: get-utilization
              type: call
              call: "workday.get-time-entries"
              with:
                practice: "{{practice_area}}"
                period: "{{reporting_period}}"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "engagement-health"
            - name: notify-leadership
              type: call
              call: "slack.post-message"
              with:
                channel: "practice-leadership"
                text: "Engagement health dashboard updated for {{practice_area}} ({{reporting_period}}). {{get-engagements.totalSize}} active engagements. Dashboard: {{refresh-dashboard.url}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-opportunities
              method: GET
    - 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"
          inputParameters:
            - name: practice
              in: query
            - name: period
              in: query
          operations:
            - name: list-reports
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: time-entries
          path: "/timeTracking/entries"
          inputParameters:
            - name: practice
              in: query
            - name: period
              in: query
          operations:
            - name: get-time-entries
              method: GET
    - type: http
      namespace: tableau
      baseUri: "https://tableau.mckinsey.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/mckinsey-main/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When an engagement risk flag is raised, creates a Salesforce case, escalates via ServiceNow priority ticket, alerts the risk committee in Microsoft Teams, and documents the issue in Confluence.

naftiko: "0.5"
info:
  label: "Engagement Risk Escalation Pipeline"
  description: "When an engagement risk flag is raised, creates a Salesforce case, escalates via ServiceNow priority ticket, alerts the risk committee in Microsoft Teams, and documents the issue in Confluence."
  tags:
    - risk-management
    - consulting
    - salesforce
    - servicenow
    - microsoft-teams
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: risk-escalation
      port: 8080
      tools:
        - name: escalate-risk
          description: "Escalate an engagement risk across Salesforce, ServiceNow, Teams, and Confluence."
          inputParameters:
            - name: engagement_id
              in: body
              type: string
              description: "Engagement identifier."
            - name: risk_description
              in: body
              type: string
              description: "Description of the risk."
            - name: severity
              in: body
              type: string
              description: "Risk severity (high, critical)."
            - name: engagement_space_key
              in: body
              type: string
              description: "Confluence space key."
          steps:
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                Subject: "Risk Escalation: {{engagement_id}}"
                Description: "{{risk_description}}"
                Priority: "{{severity}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Engagement risk: {{engagement_id}} - {{severity}}"
                description: "{{risk_description}}"
                priority: "1"
                assigned_group: "Risk_Committee"
            - name: alert-committee
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "risk-committee"
                text: "RISK ESCALATION [{{severity}}]: Engagement {{engagement_id}}. {{risk_description}}. Case: {{create-case.id}}. Ticket: {{create-ticket.number}}."
            - name: document-risk
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{engagement_space_key}}"
                title: "Risk Escalation: {{engagement_id}} - {{severity}}"
                body: "<h2>Risk Details</h2><p>{{risk_description}}</p><p>Severity: {{severity}}</p><p>SF Case: {{create-case.id}}</p><p>SN Ticket: {{create-ticket.number}}</p>"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves an SAP Concur expense report, validates against Workday budget allocations, and sends an alert to the engagement manager via Slack if the expense exceeds thresholds.

naftiko: "0.5"
info:
  label: "Expense Report with Budget Check Pipeline"
  description: "Retrieves an SAP Concur expense report, validates against Workday budget allocations, and sends an alert to the engagement manager via Slack if the expense exceeds thresholds."
  tags:
    - finance
    - expense-management
    - sap-concur
    - workday
    - slack
capability:
  exposes:
    - type: mcp
      namespace: expense-budget-check
      port: 8080
      tools:
        - name: check-expense-budget
          description: "Retrieve a Concur expense report, check budget in Workday, and alert via Slack."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "SAP Concur expense report ID."
            - name: engagement_id
              in: body
              type: string
              description: "Engagement ID for budget lookup."
            - name: manager_channel
              in: body
              type: string
              description: "Slack channel for the engagement manager."
          steps:
            - name: get-report
              type: call
              call: "concur.get-report"
              with:
                report_id: "{{report_id}}"
            - name: check-budget
              type: call
              call: "workday.get-cost-center"
              with:
                engagement: "{{engagement_id}}"
            - name: alert-manager
              type: call
              call: "slack.post-message"
              with:
                channel: "{{manager_channel}}"
                text: "Expense report {{report_id}}: Total {{get-report.Total}} {{get-report.CurrencyCode}}. Budget remaining: {{check-budget.remaining_budget}}. Status: {{get-report.ApprovalStatusName}}."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-report
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: cost-centers
          path: "/financialManagement/costCenters"
          inputParameters:
            - name: engagement
              in: query
          operations:
            - name: get-cost-center
              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

Pulls Google Analytics page metrics for a date range, writes the results to a Google Sheets spreadsheet, and sends a summary to the marketing team via Slack.

naftiko: "0.5"
info:
  label: "Google Analytics to Google Sheets Reporting"
  description: "Pulls Google Analytics page metrics for a date range, writes the results to a Google Sheets spreadsheet, and sends a summary to the marketing team via Slack."
  tags:
    - analytics
    - marketing
    - google-analytics
    - google-sheets
    - slack
capability:
  exposes:
    - type: mcp
      namespace: ga-sheets-report
      port: 8080
      tools:
        - name: export-analytics-to-sheets
          description: "Pull Google Analytics metrics, write to Google Sheets, and notify via Slack."
          inputParameters:
            - name: property_id
              in: body
              type: string
              description: "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."
            - name: spreadsheet_id
              in: body
              type: string
              description: "Destination Google Sheets spreadsheet ID."
          steps:
            - name: get-report
              type: call
              call: "ga.run-report"
              with:
                property_id: "{{property_id}}"
                dateRangeStart: "{{start_date}}"
                dateRangeEnd: "{{end_date}}"
            - name: write-sheet
              type: call
              call: "gsheets.update-values"
              with:
                spreadsheet_id: "{{spreadsheet_id}}"
                range: "Analytics!A1"
                values: "{{get-report.rows}}"
            - name: notify-marketing
              type: call
              call: "slack.post-message"
              with:
                channel: "marketing-analytics"
                text: "Analytics export complete for {{start_date}} to {{end_date}}. Spreadsheet updated: {{write-sheet.spreadsheetUrl}}"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_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
    - 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 a document to a specified Google Drive folder. Used by research teams to share deliverables and working papers with engagement teams.

naftiko: "0.5"
info:
  label: "Google Drive Document Upload"
  description: "Uploads a document to a specified Google Drive folder. Used by research teams to share deliverables and working papers with engagement teams."
  tags:
    - document-management
    - collaboration
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: drive-upload
      port: 8080
      tools:
        - name: upload-document
          description: "Upload a document to a Google Drive folder by folder ID."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "The Google Drive folder ID."
            - name: file_name
              in: body
              type: string
              description: "Name of the file to upload."
            - name: mime_type
              in: body
              type: string
              description: "MIME type of the file."
          call: "gdrive.upload-file"
          with:
            folder_id: "{{folder_id}}"
            name: "{{file_name}}"
            mimeType: "{{mime_type}}"
  consumes:
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/upload/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: files
          path: "/files"
          inputParameters:
            - name: uploadType
              in: query
              value: "multipart"
          operations:
            - name: upload-file
              method: POST

Reads data from a specified range in a Google Sheets spreadsheet. Used by analysts to pull engagement metrics, financial models, and tracking data.

naftiko: "0.5"
info:
  label: "Google Sheets Data Reader"
  description: "Reads data from a specified range in a Google Sheets spreadsheet. Used by analysts to pull engagement metrics, financial models, and tracking data."
  tags:
    - analytics
    - data
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: sheets-reader
      port: 8080
      tools:
        - name: read-sheet-data
          description: "Read data from a Google Sheets range."
          inputParameters:
            - name: spreadsheet_id
              in: body
              type: string
              description: "Google Sheets spreadsheet ID."
            - name: range
              in: body
              type: string
              description: "A1 notation range (e.g., Sheet1!A1:D10)."
          call: "gsheets.get-values"
          with:
            spreadsheet_id: "{{spreadsheet_id}}"
            range: "{{range}}"
  consumes:
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: values
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: get-values
              method: GET

Retrieves a HubSpot contact by email address. Returns name, company, lifecycle stage, and last activity date. Used by business development for lead qualification.

naftiko: "0.5"
info:
  label: "HubSpot Contact Lookup"
  description: "Retrieves a HubSpot contact by email address. Returns name, company, lifecycle stage, and last activity date. Used by business development for lead qualification."
  tags:
    - business-development
    - crm
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: hubspot-contacts
      port: 8080
      tools:
        - name: get-contact-by-email
          description: "Look up a HubSpot contact by email. Returns name, company, lifecycle stage, and last activity."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Contact email address."
          call: "hubspot.get-contact"
          with:
            email: "{{email}}"
          outputParameters:
            - name: first_name
              type: string
              mapping: "$.properties.firstname"
            - name: last_name
              type: string
              mapping: "$.properties.lastname"
            - name: company
              type: string
              mapping: "$.properties.company"
            - name: lifecycle_stage
              type: string
              mapping: "$.properties.lifecyclestage"
  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/{{email}}"
          inputParameters:
            - name: email
              in: path
            - name: idProperty
              in: query
              value: "email"
          operations:
            - name: get-contact
              method: GET

Pulls industry benchmarking data from Bloomberg, enriches it with Tableau analytics, stores results in Databricks, and shares the dashboard link via Slack for the research team.

naftiko: "0.5"
info:
  label: "Industry Benchmarking Data Pipeline"
  description: "Pulls industry benchmarking data from Bloomberg, enriches it with Tableau analytics, stores results in Databricks, and shares the dashboard link via Slack for the research team."
  tags:
    - research
    - benchmarking
    - bloomberg
    - tableau
    - databricks
    - slack
capability:
  exposes:
    - type: mcp
      namespace: benchmarking-pipeline
      port: 8080
      tools:
        - name: run-benchmark
          description: "Execute an industry benchmarking pipeline across Bloomberg, Tableau, Databricks, and Slack."
          inputParameters:
            - name: industry_code
              in: body
              type: string
              description: "Bloomberg industry classification code."
            - name: metric_set
              in: body
              type: string
              description: "Comma-separated financial metrics to benchmark."
            - name: target_table
              in: body
              type: string
              description: "Databricks target table for storing results."
          steps:
            - name: pull-data
              type: call
              call: "bloomberg.get-industry-data"
              with:
                industry: "{{industry_code}}"
                fields: "{{metric_set}}"
            - name: store-results
              type: call
              call: "databricks.run-job"
              with:
                job_id: "benchmark-ingestion"
                notebook_params: "{\"industry\": \"{{industry_code}}\", \"table\": \"{{target_table}}\"}"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-workbook"
              with:
                workbook_id: "industry-benchmarks"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "research-analytics"
                text: "Industry benchmark updated for {{industry_code}}. Data stored in {{target_table}}. Dashboard refreshed: {{refresh-dashboard.url}}"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: industry
          path: "/industry/{{industry}}"
          inputParameters:
            - name: industry
              in: path
            - name: fields
              in: query
          operations:
            - name: get-industry-data
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://mckinsey.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.mckinsey.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/mckinsey-main/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              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

Searches the McKinsey Confluence knowledge base for articles matching a query string. Returns top results with titles, excerpts, and links for consultant self-service research.

naftiko: "0.5"
info:
  label: "Knowledge Article Search"
  description: "Searches the McKinsey Confluence knowledge base for articles matching a query string. Returns top results with titles, excerpts, and links for consultant self-service research."
  tags:
    - knowledge-management
    - research
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-search
      port: 8080
      tools:
        - name: search-articles
          description: "Search Confluence knowledge base for articles matching a query. Returns titles, excerpts, and URLs."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query string."
            - name: max_results
              in: body
              type: integer
              description: "Maximum number of results to return."
          call: "confluence.search-content"
          with:
            cql: "type=page AND text~\"{{query}}\""
            limit: "{{max_results}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: search
          path: "/search"
          inputParameters:
            - name: cql
              in: query
            - name: limit
              in: query
          operations:
            - name: search-content
              method: GET

On engagement closeout, extracts key lessons from the Confluence engagement space, tags and indexes them in Elasticsearch, and notifies the knowledge management team via Slack.

naftiko: "0.5"
info:
  label: "Knowledge Capture from Engagement Closeout"
  description: "On engagement closeout, extracts key lessons from the Confluence engagement space, tags and indexes them in Elasticsearch, and notifies the knowledge management team via Slack."
  tags:
    - knowledge-management
    - search
    - confluence
    - elasticsearch
    - slack
capability:
  exposes:
    - type: mcp
      namespace: knowledge-capture
      port: 8080
      tools:
        - name: capture-lessons
          description: "Extract lessons learned from a Confluence engagement space, index in Elasticsearch, and notify the KM team."
          inputParameters:
            - name: space_key
              in: body
              type: string
              description: "Confluence space key for the engagement."
            - name: engagement_name
              in: body
              type: string
              description: "Name of the engagement."
            - name: industry
              in: body
              type: string
              description: "Industry vertical."
            - name: capability_area
              in: body
              type: string
              description: "Capability area (e.g., digital, operations, strategy)."
          steps:
            - name: get-pages
              type: call
              call: "confluence.search-content"
              with:
                cql: "space={{space_key}} AND label=\"lessons-learned\""
                limit: "50"
            - name: index-lessons
              type: call
              call: "elasticsearch.bulk-index"
              with:
                index: "knowledge-base"
                documents: "{{get-pages.results}}"
                metadata: "{\"engagement\": \"{{engagement_name}}\", \"industry\": \"{{industry}}\", \"capability\": \"{{capability_area}}\"}"
            - name: notify-km
              type: call
              call: "slack.post-message"
              with:
                channel: "knowledge-management"
                text: "{{get-pages.totalSize}} lessons captured from {{engagement_name}} ({{industry}}/{{capability_area}}). Indexed in knowledge base."
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: search
          path: "/search"
          inputParameters:
            - name: cql
              in: query
            - name: limit
              in: query
          operations:
            - name: search-content
              method: GET
    - type: http
      namespace: elasticsearch
      baseUri: "https://es.mckinsey.com"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token"
      resources:
        - name: bulk
          path: "/{{index}}/_bulk"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: bulk-index
              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 LinkedIn company profile data including employee count, industry, headquarters, and recent updates. Used by research analysts for client due diligence.

naftiko: "0.5"
info:
  label: "LinkedIn Company Insights Lookup"
  description: "Retrieves LinkedIn company profile data including employee count, industry, headquarters, and recent updates. Used by research analysts for client due diligence."
  tags:
    - research
    - market-intelligence
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: linkedin-research
      port: 8080
      tools:
        - name: get-company-profile
          description: "Retrieve LinkedIn company profile by organization ID. Returns employee count, industry, and headquarters."
          inputParameters:
            - name: organization_id
              in: body
              type: string
              description: "LinkedIn organization ID."
          call: "linkedin.get-organization"
          with:
            organization_id: "{{organization_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.localizedName"
            - name: employee_count
              type: integer
              mapping: "$.staffCount"
            - name: industry
              type: string
              mapping: "$.localizedIndustry"
            - name: headquarters
              type: string
              mapping: "$.locations[0].city"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: organizations
          path: "/organizations/{{organization_id}}"
          inputParameters:
            - name: organization_id
              in: path
          operations:
            - name: get-organization
              method: GET

Retrieves campaign metrics from MailChimp after a newsletter send, logs engagement data in Salesforce, and posts a performance summary to Slack.

naftiko: "0.5"
info:
  label: "MailChimp Newsletter with Salesforce Sync"
  description: "Retrieves campaign metrics from MailChimp after a newsletter send, logs engagement data in Salesforce, and posts a performance summary to Slack."
  tags:
    - marketing
    - email-campaigns
    - mailchimp
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: newsletter-sync
      port: 8080
      tools:
        - name: sync-newsletter-results
          description: "Pull MailChimp campaign results, log in Salesforce, and notify via Slack."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "MailChimp campaign ID."
            - name: campaign_name
              in: body
              type: string
              description: "Campaign name for logging."
          steps:
            - name: get-metrics
              type: call
              call: "mailchimp.get-campaign-report"
              with:
                campaign_id: "{{campaign_id}}"
            - name: log-results
              type: call
              call: "salesforce.create-campaign-result"
              with:
                Name: "{{campaign_name}}"
                Open_Rate__c: "{{get-metrics.opens.open_rate}}"
                Click_Rate__c: "{{get-metrics.clicks.click_rate}}"
                Emails_Sent__c: "{{get-metrics.emails_sent}}"
            - name: notify-marketing
              type: call
              call: "slack.post-message"
              with:
                channel: "marketing-campaigns"
                text: "Newsletter {{campaign_name}} results: Open rate {{get-metrics.opens.open_rate}}%, Click rate {{get-metrics.clicks.click_rate}}%, Sent to {{get-metrics.emails_sent}} recipients."
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: reports
          path: "/reports/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-report
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign_Result__c"
          operations:
            - name: create-campaign-result
              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

Schedules a Microsoft Teams meeting for a client session, creates a Notion page for meeting notes, and posts the meeting link and notes page to Slack for the engagement team.

naftiko: "0.5"
info:
  label: "Microsoft Teams Meeting with Notion Notes Pipeline"
  description: "Schedules a Microsoft Teams meeting for a client session, creates a Notion page for meeting notes, and posts the meeting link and notes page to Slack for the engagement team."
  tags:
    - collaboration
    - meetings
    - microsoft-teams
    - notion
    - slack
capability:
  exposes:
    - type: mcp
      namespace: meeting-notes-pipeline
      port: 8080
      tools:
        - name: schedule-meeting-with-notes
          description: "Schedule a Teams meeting, create a Notion notes page, and share via Slack."
          inputParameters:
            - name: organizer_email
              in: body
              type: string
              description: "Organizer email address."
            - name: subject
              in: body
              type: string
              description: "Meeting subject."
            - name: start_time
              in: body
              type: string
              description: "Start time in ISO 8601 format."
            - name: end_time
              in: body
              type: string
              description: "End time in ISO 8601 format."
            - name: attendees
              in: body
              type: string
              description: "Comma-separated attendee emails."
            - name: notification_channel
              in: body
              type: string
              description: "Slack channel for the engagement."
          steps:
            - name: create-meeting
              type: call
              call: "msgraph.create-event"
              with:
                organizer: "{{organizer_email}}"
                subject: "{{subject}}"
                start: "{{start_time}}"
                end: "{{end_time}}"
                attendees: "{{attendees}}"
            - name: create-notes
              type: call
              call: "notion.create-page"
              with:
                database_id: "meeting-notes-db"
                title: "Notes: {{subject}}"
                content: "## {{subject}}\n\n**Date:** {{start_time}}\n**Attendees:** {{attendees}}\n\n### Agenda\n\n### Notes\n\n### Action Items"
            - name: share-details
              type: call
              call: "slack.post-message"
              with:
                channel: "{{notification_channel}}"
                text: "Meeting scheduled: {{subject}} at {{start_time}}. Teams link: {{create-meeting.onlineMeeting.joinUrl}}. Notes: {{create-notes.url}}"
  consumes:
    - type: http
      namespace: msgraph
      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
    - type: http
      namespace: notion
      baseUri: "https://api.notion.com/v1"
      authentication:
        type: bearer
        token: "$secrets.notion_token"
      inputParameters:
        - name: Notion-Version
          in: header
          value: "2022-06-28"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a Google Drive folder, sends a welcome email via Microsoft Graph, and posts an introduction to the Slack new-hires channel.

naftiko: "0.5"
info:
  label: "New Hire Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a Google Drive folder, sends a welcome email via Microsoft Graph, and posts an introduction to the Slack new-hires channel."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - google-drive
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday worker ID, orchestrate new hire onboarding across ServiceNow, Google Drive, email, and Slack."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: practice
              in: body
              type: string
              description: "Practice area the new hire is joining."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-employee.full_name}} - {{practice}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
            - name: create-folder
              type: call
              call: "gdrive.create-folder"
              with:
                parent_id: "onboarding-root"
                name: "{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msgraph.send-mail"
              with:
                to: "{{get-employee.work_email}}"
                subject: "Welcome to McKinsey, {{get-employee.first_name}}!"
                body: "Your onboarding ticket is {{open-ticket.number}}. Your document folder is at {{create-folder.webViewLink}}."
            - name: announce-hire
              type: call
              call: "slack.post-message"
              with:
                channel: "new-hires"
                text: "Welcome {{get-employee.full_name}} joining {{practice}} on {{start_date}}!"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      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://mckinsey.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: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/noreply@mckinsey.com/sendMail"
          operations:
            - name: send-mail
              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

Runs a skills assessment by assigning a Pluralsight skill path, tracking completion in Workday learning records, and notifying the consultant and their manager via Slack.

naftiko: "0.5"
info:
  label: "Pluralsight Skills Assessment Pipeline"
  description: "Runs a skills assessment by assigning a Pluralsight skill path, tracking completion in Workday learning records, and notifying the consultant and their manager via Slack."
  tags:
    - learning
    - talent-development
    - pluralsight
    - workday
    - slack
capability:
  exposes:
    - type: mcp
      namespace: skills-assessment
      port: 8080
      tools:
        - name: assign-skill-assessment
          description: "Assign a Pluralsight skill assessment path and track results across Workday and Slack."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "Consultant email address."
            - name: skill_path_id
              in: body
              type: string
              description: "Pluralsight skill path ID."
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
          steps:
            - name: assign-path
              type: call
              call: "pluralsight.assign-channel"
              with:
                user_email: "{{user_email}}"
                channel_id: "{{skill_path_id}}"
            - name: log-learning
              type: call
              call: "workday.create-learning-record"
              with:
                worker_id: "{{worker_id}}"
                course_name: "{{assign-path.channel_name}}"
                provider: "Pluralsight"
                status: "assigned"
            - name: notify-consultant
              type: call
              call: "slack.post-message"
              with:
                channel: "{{user_email}}"
                text: "You have been assigned the Pluralsight skill path: {{assign-path.channel_name}}. Complete it to update your skills profile."
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: channels
          path: "/channels/{{channel_id}}/assignments"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: assign-channel
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: learning
          path: "/learning/records"
          operations:
            - name: create-learning-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

Orchestrates the recruiting pipeline by posting a job on Indeed, creating a tracking board in Notion, scheduling screening slots via Microsoft Teams calendar, and notifying the recruiting team on Slack.

naftiko: "0.5"
info:
  label: "Recruiting Pipeline Orchestrator"
  description: "Orchestrates the recruiting pipeline by posting a job on Indeed, creating a tracking board in Notion, scheduling screening slots via Microsoft Teams calendar, and notifying the recruiting team on Slack."
  tags:
    - recruiting
    - talent-acquisition
    - indeed
    - notion
    - microsoft-teams
    - slack
capability:
  exposes:
    - type: mcp
      namespace: recruiting-pipeline
      port: 8080
      tools:
        - name: launch-recruiting
          description: "Launch a recruiting pipeline: post on Indeed, create tracking in Notion, schedule screenings, and notify the team."
          inputParameters:
            - name: job_title
              in: body
              type: string
              description: "Job title."
            - name: description
              in: body
              type: string
              description: "Job description."
            - name: location
              in: body
              type: string
              description: "Job location."
            - name: recruiter_email
              in: body
              type: string
              description: "Lead recruiter email."
          steps:
            - name: post-job
              type: call
              call: "indeed.create-job"
              with:
                title: "{{job_title}}"
                description: "{{description}}"
                location: "{{location}}"
                company: "McKinsey & Company"
            - name: create-tracker
              type: call
              call: "notion.create-page"
              with:
                database_id: "recruiting-tracker-db"
                title: "{{job_title}} - {{location}}"
                content: "Indeed posting: {{post-job.url}}. Status: Active."
            - name: create-screening-slots
              type: call
              call: "msgraph.create-event"
              with:
                organizer: "{{recruiter_email}}"
                subject: "Screening Block: {{job_title}}"
                start: "next-monday-09:00"
                end: "next-monday-12:00"
                attendees: "{{recruiter_email}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "recruiting"
                text: "New recruiting pipeline launched: {{job_title}} in {{location}}. Indeed: {{post-job.url}}. Tracker: {{create-tracker.url}}."
  consumes:
    - type: http
      namespace: indeed
      baseUri: "https://apis.indeed.com/ads/v1"
      authentication:
        type: bearer
        token: "$secrets.indeed_token"
      resources:
        - name: jobs
          path: "/jobs"
          operations:
            - name: create-job
              method: POST
    - type: http
      namespace: notion
      baseUri: "https://api.notion.com/v1"
      authentication:
        type: bearer
        token: "$secrets.notion_token"
      inputParameters:
        - name: Notion-Version
          in: header
          value: "2022-06-28"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msgraph
      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
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Publishes a research brief by creating a Confluence page with the content, uploading the PDF to Google Drive, sharing the link in Slack, and logging the publication in Salesforce as a content asset.

naftiko: "0.5"
info:
  label: "Research Brief Publication Pipeline"
  description: "Publishes a research brief by creating a Confluence page with the content, uploading the PDF to Google Drive, sharing the link in Slack, and logging the publication in Salesforce as a content asset."
  tags:
    - research
    - publishing
    - confluence
    - google-drive
    - slack
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: research-publishing
      port: 8080
      tools:
        - name: publish-brief
          description: "Publish a research brief across Confluence, Google Drive, Slack, and Salesforce."
          inputParameters:
            - name: title
              in: body
              type: string
              description: "Title of the research brief."
            - name: content_html
              in: body
              type: string
              description: "HTML body content for the Confluence page."
            - name: industry
              in: body
              type: string
              description: "Industry tag for the brief."
            - name: author_email
              in: body
              type: string
              description: "Email of the author."
          steps:
            - name: create-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "RESEARCH"
                title: "{{title}}"
                body: "{{content_html}}"
                labels: "research-brief,{{industry}}"
            - name: upload-pdf
              type: call
              call: "gdrive.upload-file"
              with:
                folder_id: "research-briefs-folder"
                name: "{{title}}.pdf"
                mimeType: "application/pdf"
            - name: share-brief
              type: call
              call: "slack.post-message"
              with:
                channel: "research-publications"
                text: "New research brief published: {{title}} by {{author_email}}. Confluence: {{create-page.url}} | Drive: {{upload-pdf.webViewLink}}"
            - name: log-asset
              type: call
              call: "salesforce.create-content-asset"
              with:
                Name: "{{title}}"
                Type__c: "Research Brief"
                Industry__c: "{{industry}}"
                URL__c: "{{create-page.url}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/upload/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: files
          path: "/files"
          inputParameters:
            - name: uploadType
              in: query
              value: "multipart"
          operations:
            - name: upload-file
              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
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: content-assets
          path: "/sobjects/Content_Asset__c"
          operations:
            - name: create-content-asset
              method: POST

Retrieves a Salesforce opportunity by ID, returning account name, stage, close date, and estimated value. Used by engagement managers to quickly check pipeline status.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves a Salesforce opportunity by ID, returning account name, stage, close date, and estimated value. Used by engagement managers to quickly check pipeline status."
  tags:
    - sales
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm-pipeline
      port: 8080
      tools:
        - name: get-opportunity
          description: "Look up a Salesforce opportunity by ID. Returns account name, stage, close date, and value."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            opportunity_id: "{{opportunity_id}}"
          outputParameters:
            - name: account_name
              type: string
              mapping: "$.Account.Name"
            - name: stage
              type: string
              mapping: "$.StageName"
            - name: close_date
              type: string
              mapping: "$.CloseDate"
            - name: amount
              type: string
              mapping: "$.Amount"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET

Updates a Salesforce opportunity stage and notifies the engagement team in Slack with the new status. Used by engagement managers to keep CRM and team communications in sync.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Update with Slack Notification"
  description: "Updates a Salesforce opportunity stage and notifies the engagement team in Slack with the new status. Used by engagement managers to keep CRM and team communications in sync."
  tags:
    - sales
    - crm
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: opp-update-notify
      port: 8080
      tools:
        - name: update-opportunity-notify
          description: "Update a Salesforce opportunity stage and notify the team via Slack."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "Salesforce opportunity ID."
            - name: new_stage
              in: body
              type: string
              description: "New opportunity stage name."
            - name: notification_channel
              in: body
              type: string
              description: "Slack channel for notification."
          steps:
            - name: update-opp
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
                StageName: "{{new_stage}}"
            - name: get-opp
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "{{notification_channel}}"
                text: "Opportunity {{get-opp.Name}} moved to {{new_stage}}. Account: {{get-opp.Account.Name}}. Value: {{get-opp.Amount}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: update-opportunity
              method: PATCH
            - name: get-opportunity
              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 an expense report from SAP Concur by report ID. Returns total amount, approval status, and currency. Used by finance teams for engagement cost tracking.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Lookup"
  description: "Retrieves an expense report from SAP Concur by report ID. Returns total amount, approval status, and currency. Used by finance teams for engagement cost tracking."
  tags:
    - finance
    - expense-management
    - sap-concur
capability:
  exposes:
    - type: mcp
      namespace: expense-tracking
      port: 8080
      tools:
        - name: get-expense-report
          description: "Look up an SAP Concur expense report by report ID."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "SAP Concur expense report ID."
          call: "concur.get-report"
          with:
            report_id: "{{report_id}}"
          outputParameters:
            - name: total
              type: string
              mapping: "$.Total"
            - name: status
              type: string
              mapping: "$.ApprovalStatusName"
            - name: currency
              type: string
              mapping: "$.CurrencyCode"
            - name: submit_date
              type: string
              mapping: "$.SubmitDate"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-report
              method: GET

Delivers sales enablement content by finding relevant materials in Seismic, generating a personalized share link, logging the interaction in Salesforce, and notifying the business development lead via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Seismic Content Delivery Pipeline"
  description: "Delivers sales enablement content by finding relevant materials in Seismic, generating a personalized share link, logging the interaction in Salesforce, and notifying the business development lead via Microsoft Teams."
  tags:
    - business-development
    - sales-enablement
    - seismic
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: content-delivery
      port: 8080
      tools:
        - name: deliver-content
          description: "Find and deliver Seismic content to a prospect, log in Salesforce, and notify the BD lead."
          inputParameters:
            - name: content_query
              in: body
              type: string
              description: "Search query for Seismic content."
            - name: prospect_email
              in: body
              type: string
              description: "Prospect email address."
            - name: opportunity_id
              in: body
              type: string
              description: "Salesforce opportunity ID."
            - name: bd_lead_upn
              in: body
              type: string
              description: "BD lead Microsoft Teams UPN."
          steps:
            - name: find-content
              type: call
              call: "seismic.search-content"
              with:
                query: "{{content_query}}"
            - name: create-link
              type: call
              call: "seismic.create-share-link"
              with:
                content_id: "{{find-content.results[0].id}}"
                recipient_email: "{{prospect_email}}"
            - name: log-activity
              type: call
              call: "salesforce.create-task"
              with:
                WhatId: "{{opportunity_id}}"
                Subject: "Content shared: {{find-content.results[0].title}}"
                Description: "Shared {{find-content.results[0].title}} with {{prospect_email}} via Seismic: {{create-link.url}}"
            - name: notify-bd
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{bd_lead_upn}}"
                text: "Content shared with {{prospect_email}}: {{find-content.results[0].title}}. Link: {{create-link.url}}. Logged to opportunity {{opportunity_id}}."
  consumes:
    - type: http
      namespace: seismic
      baseUri: "https://api.seismic.com/integration/v2"
      authentication:
        type: bearer
        token: "$secrets.seismic_token"
      resources:
        - name: content-search
          path: "/content/search"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-content
              method: GET
        - name: share-links
          path: "/content/shareLinks"
          operations:
            - name: create-share-link
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chat-messages
          path: "/users/{{recipient_upn}}/chats"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a ServiceNow incident by number. Returns short description, state, priority, assigned group, and resolution notes. Used by IT support for quick incident triage.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number. Returns short description, state, priority, assigned group, and resolution notes. Used by IT support for quick incident triage."
  tags:
    - it-support
    - incident-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-incidents
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number. Returns description, state, priority, and assigned group."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: short_description
              type: string
              mapping: "$.result.short_description"
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET

Resolves a ServiceNow incident by updating its state and resolution notes, then documents the resolution in Confluence and notifies the team via Slack.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Resolution with Confluence Documentation"
  description: "Resolves a ServiceNow incident by updating its state and resolution notes, then documents the resolution in Confluence and notifies the team via Slack."
  tags:
    - it-support
    - incident-management
    - servicenow
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: incident-resolution
      port: 8080
      tools:
        - name: resolve-incident
          description: "Resolve a ServiceNow incident, document in Confluence, and notify via Slack."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number."
            - name: resolution_notes
              in: body
              type: string
              description: "Resolution notes."
            - name: space_key
              in: body
              type: string
              description: "Confluence space key for documentation."
          steps:
            - name: resolve-ticket
              type: call
              call: "servicenow.update-incident"
              with:
                number: "{{incident_number}}"
                state: "resolved"
                close_notes: "{{resolution_notes}}"
            - name: document-resolution
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{space_key}}"
                title: "Resolution: {{incident_number}}"
                body: "<h2>Incident {{incident_number}}</h2><p>{{resolution_notes}}</p>"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "it-operations"
                text: "Incident {{incident_number}} resolved. Notes: {{resolution_notes}}. Documentation: {{document-resolution.url}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: update-incident
              method: PATCH
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Posts a message to a specified Slack channel. Used across functions for notifications, alerts, and team communications.

naftiko: "0.5"
info:
  label: "Slack Channel Message Post"
  description: "Posts a message to a specified Slack channel. Used across functions for notifications, alerts, and team communications."
  tags:
    - communications
    - notifications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack-messaging
      port: 8080
      tools:
        - name: post-channel-message
          description: "Post a message to a Slack channel by channel name."
          inputParameters:
            - name: channel
              in: body
              type: string
              description: "Slack channel name or ID."
            - name: message_text
              in: body
              type: string
              description: "The message text to post."
          call: "slack.post-message"
          with:
            channel: "{{channel}}"
            text: "{{message_text}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Triggers a refresh of a Tableau workbook by workbook ID. Used by analytics teams to ensure client-facing dashboards reflect the latest data before presentations.

naftiko: "0.5"
info:
  label: "Tableau Dashboard Refresh"
  description: "Triggers a refresh of a Tableau workbook by workbook ID. Used by analytics teams to ensure client-facing dashboards reflect the latest data before presentations."
  tags:
    - analytics
    - visualization
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: analytics-refresh
      port: 8080
      tools:
        - name: refresh-workbook
          description: "Trigger a data refresh for a Tableau workbook by ID."
          inputParameters:
            - name: workbook_id
              in: body
              type: string
              description: "The Tableau workbook ID."
          call: "tableau.refresh-workbook"
          with:
            workbook_id: "{{workbook_id}}"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://tableau.mckinsey.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: workbooks
          path: "/sites/{{site_id}}/workbooks/{{workbook_id}}/refresh"
          inputParameters:
            - name: site_id
              in: path
              value: "mckinsey-main"
            - name: workbook_id
              in: path
          operations:
            - name: refresh-workbook
              method: POST

Runs the semi-annual talent review by pulling performance data from Workday, aggregating feedback from Google Forms, generating a summary deck in Google Slides, and scheduling the review meeting via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Talent Review Pipeline"
  description: "Runs the semi-annual talent review by pulling performance data from Workday, aggregating feedback from Google Forms, generating a summary deck in Google Slides, and scheduling the review meeting via Microsoft Teams."
  tags:
    - talent
    - performance-management
    - workday
    - google-forms
    - google-slides
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: talent-review
      port: 8080
      tools:
        - name: prepare-talent-review
          description: "Prepare talent review materials by pulling performance data, aggregating feedback, creating a deck, and scheduling the meeting."
          inputParameters:
            - name: practice_area
              in: body
              type: string
              description: "Practice area for the review."
            - name: review_period
              in: body
              type: string
              description: "Review period (e.g., H1-2026)."
            - name: review_panel_emails
              in: body
              type: string
              description: "Comma-separated emails of review panel members."
          steps:
            - name: get-performance
              type: call
              call: "workday.get-performance-reviews"
              with:
                practice: "{{practice_area}}"
                period: "{{review_period}}"
            - name: get-feedback
              type: call
              call: "gforms.list-responses"
              with:
                form_id: "talent-feedback-form"
            - name: create-deck
              type: call
              call: "gslides.create-presentation"
              with:
                title: "Talent Review: {{practice_area}} - {{review_period}}"
            - name: schedule-review
              type: call
              call: "msgraph.create-event"
              with:
                organizer: "talent-ops@mckinsey.com"
                subject: "Talent Review: {{practice_area}} {{review_period}}"
                attendees: "{{review_panel_emails}}"
                start: "{{review_period}}-review-start"
                end: "{{review_period}}-review-end"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: performance
          path: "/performanceManagement/reviews"
          inputParameters:
            - name: practice
              in: query
            - name: period
              in: query
          operations:
            - name: get-performance-reviews
              method: GET
    - type: http
      namespace: gforms
      baseUri: "https://forms.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: responses
          path: "/forms/{{form_id}}/responses"
          inputParameters:
            - name: form_id
              in: path
          operations:
            - name: list-responses
              method: GET
    - type: http
      namespace: gslides
      baseUri: "https://slides.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: presentations
          path: "/presentations"
          operations:
            - name: create-presentation
              method: POST
    - type: http
      namespace: msgraph
      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

Publishes a McKinsey Insights article by creating the page in Confluence, scheduling social media posts via HubSpot to LinkedIn and Twitter, and notifying the editorial team via Slack.

naftiko: "0.5"
info:
  label: "Thought Leadership Publishing Pipeline"
  description: "Publishes a McKinsey Insights article by creating the page in Confluence, scheduling social media posts via HubSpot to LinkedIn and Twitter, and notifying the editorial team via Slack."
  tags:
    - marketing
    - thought-leadership
    - confluence
    - hubspot
    - slack
capability:
  exposes:
    - type: mcp
      namespace: thought-leadership
      port: 8080
      tools:
        - name: publish-article
          description: "Publish a thought leadership article across Confluence, social channels, and Slack."
          inputParameters:
            - name: title
              in: body
              type: string
              description: "Article title."
            - name: content_html
              in: body
              type: string
              description: "HTML article body."
            - name: author_name
              in: body
              type: string
              description: "Author display name."
            - name: industry_tags
              in: body
              type: string
              description: "Comma-separated industry tags."
          steps:
            - name: create-article
              type: call
              call: "confluence.create-page"
              with:
                space_key: "INSIGHTS"
                title: "{{title}}"
                body: "{{content_html}}"
                labels: "insights,{{industry_tags}}"
            - name: schedule-linkedin
              type: call
              call: "hubspot.create-social-post"
              with:
                network: "linkedin"
                content: "New from McKinsey: {{title}} by {{author_name}}. Read more: {{create-article.url}}"
            - name: schedule-twitter
              type: call
              call: "hubspot.create-social-post"
              with:
                network: "twitter"
                content: "{{title}} by {{author_name}} - {{create-article.url}} #McKinseyInsights"
            - name: notify-editorial
              type: call
              call: "slack.post-message"
              with:
                channel: "editorial-team"
                text: "Article published: {{title}} by {{author_name}}. Social posts scheduled. Link: {{create-article.url}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: social
          path: "/broadcast/v1/broadcasts"
          operations:
            - name: create-social-post
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a consultant submits a travel request, validates the budget against Workday cost center allocations, creates an approval task in ServiceNow, and notifies the manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Travel Booking Approval Pipeline"
  description: "When a consultant submits a travel request, validates the budget against Workday cost center allocations, creates an approval task in ServiceNow, and notifies the manager via Microsoft Teams."
  tags:
    - travel
    - finance
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: travel-approval
      port: 8080
      tools:
        - name: submit-travel-request
          description: "Submit a travel request for approval by validating budget, creating a ServiceNow task, and notifying the manager."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID of the requestor."
            - name: engagement_id
              in: body
              type: string
              description: "Engagement to charge travel to."
            - name: destination
              in: body
              type: string
              description: "Travel destination."
            - name: estimated_cost
              in: body
              type: string
              description: "Estimated travel cost."
            - name: travel_dates
              in: body
              type: string
              description: "Travel date range."
          steps:
            - name: check-budget
              type: call
              call: "workday.get-cost-center"
              with:
                worker_id: "{{worker_id}}"
                engagement: "{{engagement_id}}"
            - name: create-approval
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Travel approval: {{destination}} for {{worker_id}}"
                description: "Destination: {{destination}}. Dates: {{travel_dates}}. Estimated cost: {{estimated_cost}}. Budget remaining: {{check-budget.remaining_budget}}."
                category: "travel"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{check-budget.manager_email}}"
                text: "Travel approval needed for {{destination}} ({{travel_dates}}). Cost: {{estimated_cost}}. Budget remaining: {{check-budget.remaining_budget}}. Ticket: {{create-approval.number}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: cost-centers
          path: "/financialManagement/costCenters"
          inputParameters:
            - name: worker_id
              in: query
            - name: engagement
              in: query
          operations:
            - name: get-cost-center
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chat-messages
          path: "/users/{{recipient_upn}}/chats"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Generates a weekly status report by pulling active engagements from Salesforce, collecting time entries from Workday, building a summary in Google Sheets, and distributing via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Weekly Engagement Status Report Generator"
  description: "Generates a weekly status report by pulling active engagements from Salesforce, collecting time entries from Workday, building a summary in Google Sheets, and distributing via Microsoft Teams."
  tags:
    - reporting
    - engagement-management
    - salesforce
    - workday
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: status-reporting
      port: 8080
      tools:
        - name: generate-weekly-report
          description: "Generate a weekly engagement status report pulling from Salesforce, Workday, and Google Sheets, then distribute via Teams."
          inputParameters:
            - name: report_week
              in: body
              type: string
              description: "Week start date in YYYY-MM-DD format."
            - name: practice_area
              in: body
              type: string
              description: "Practice area to report on."
            - name: distribution_channel
              in: body
              type: string
              description: "Teams channel ID for distribution."
          steps:
            - name: get-engagements
              type: call
              call: "salesforce.query-opportunities"
              with:
                q: "SELECT Id, Name, Account.Name, StageName FROM Opportunity WHERE StageName='Active' AND Practice__c='{{practice_area}}'"
            - name: get-hours
              type: call
              call: "workday.get-time-entries"
              with:
                practice: "{{practice_area}}"
                week_start: "{{report_week}}"
            - name: update-sheet
              type: call
              call: "gsheets.update-values"
              with:
                spreadsheet_id: "weekly-status-template"
                range: "WeeklyData!A2"
                values: "{{get-engagements.records}}"
            - name: distribute-report
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "{{distribution_channel}}"
                text: "Weekly Status Report for {{practice_area}} (week of {{report_week}}): {{get-engagements.totalSize}} active engagements. Spreadsheet: {{update-sheet.spreadsheetUrl}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-opportunities
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: time-entries
          path: "/timeTracking/entries"
          inputParameters:
            - name: practice
              in: query
            - name: week_start
              in: query
          operations:
            - name: get-time-entries
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_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
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/{{channel_id}}/channels/General/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

On employee departure, updates Workday status, revokes access via Azure Active Directory, closes open ServiceNow tickets, and notifies HR and IT via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Employee Offboarding Pipeline"
  description: "On employee departure, updates Workday status, revokes access via Azure Active Directory, closes open ServiceNow tickets, and notifies HR and IT via Microsoft Teams."
  tags:
    - hr
    - offboarding
    - workday
    - azure-active-directory
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: process-offboarding
          description: "Process employee offboarding across Workday, Azure AD, ServiceNow, and Teams."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
            - name: last_day
              in: body
              type: string
              description: "Last working day in YYYY-MM-DD format."
            - name: manager_upn
              in: body
              type: string
              description: "Manager UPN for notification."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: disable-account
              type: call
              call: "azuread.disable-user"
              with:
                user_principal_name: "{{get-employee.work_email}}"
            - name: close-tickets
              type: call
              call: "servicenow.close-user-tickets"
              with:
                caller_id: "{{get-employee.work_email}}"
            - name: notify-teams
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_upn}}"
                text: "Offboarding complete for {{get-employee.full_name}} (last day: {{last_day}}). AD account disabled. {{close-tickets.count}} tickets closed."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      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: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_principal_name}}"
          inputParameters:
            - name: user_principal_name
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: caller_id
              in: query
          operations:
            - name: close-user-tickets
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chat-messages
          path: "/users/{{recipient_upn}}/chats"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves an employee profile from Workday by worker ID. Returns name, title, office location, practice area, and manager. Used for staffing and team assembly.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves an employee profile from Workday by worker ID. Returns name, title, office location, practice area, and manager. Used for staffing and team assembly."
  tags:
    - hr
    - talent
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up a Workday employee profile by worker ID. Returns name, title, office, practice, and manager."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.descriptor"
            - name: title
              type: string
              mapping: "$.businessTitle"
            - name: office
              type: string
              mapping: "$.primaryWorkLocation"
            - name: practice
              type: string
              mapping: "$.supervisoryOrganization.name"
            - name: manager
              type: string
              mapping: "$.manager.descriptor"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/mckinsey"
      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

Escalates a Zendesk support ticket by updating its priority, creating a linked ServiceNow incident for IT tracking, and alerting the support lead via Slack.

naftiko: "0.5"
info:
  label: "Zendesk Ticket Escalation Pipeline"
  description: "Escalates a Zendesk support ticket by updating its priority, creating a linked ServiceNow incident for IT tracking, and alerting the support lead via Slack."
  tags:
    - it-support
    - help-desk
    - zendesk
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: ticket-escalation
      port: 8080
      tools:
        - name: escalate-ticket
          description: "Escalate a Zendesk ticket, create a ServiceNow incident, and alert via Slack."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "Zendesk ticket ID."
            - name: new_priority
              in: body
              type: string
              description: "New priority level (high, urgent)."
            - name: escalation_reason
              in: body
              type: string
              description: "Reason for escalation."
          steps:
            - name: update-ticket
              type: call
              call: "zendesk.update-ticket"
              with:
                ticket_id: "{{ticket_id}}"
                priority: "{{new_priority}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Escalated from Zendesk #{{ticket_id}}"
                description: "{{escalation_reason}}"
                priority: "{{new_priority}}"
                assigned_group: "IT_Escalations"
            - name: alert-lead
              type: call
              call: "slack.post-message"
              with:
                channel: "support-escalations"
                text: "Ticket #{{ticket_id}} escalated to {{new_priority}}. Reason: {{escalation_reason}}. ServiceNow: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://mckinsey.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: update-ticket
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://mckinsey.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: 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

# --- SIMPLE CAPABILITIES (15) ---

Retrieves a Zoom meeting recording, uploads it to Google Drive for long-term storage, creates a Confluence page linking to the recording, and notifies the team via Slack.

naftiko: "0.5"
info:
  label: "Zoom Recording Archive Pipeline"
  description: "Retrieves a Zoom meeting recording, uploads it to Google Drive for long-term storage, creates a Confluence page linking to the recording, and notifies the team via Slack."
  tags:
    - collaboration
    - archiving
    - zoom
    - google-drive
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: recording-archive
      port: 8080
      tools:
        - name: archive-recording
          description: "Archive a Zoom recording to Google Drive, document in Confluence, and notify via Slack."
          inputParameters:
            - name: meeting_id
              in: body
              type: string
              description: "Zoom meeting ID."
            - name: drive_folder_id
              in: body
              type: string
              description: "Google Drive folder ID for recordings."
            - name: space_key
              in: body
              type: string
              description: "Confluence space key."
          steps:
            - name: get-recording
              type: call
              call: "zoom.get-recordings"
              with:
                meeting_id: "{{meeting_id}}"
            - name: upload-to-drive
              type: call
              call: "gdrive.upload-file"
              with:
                folder_id: "{{drive_folder_id}}"
                name: "{{get-recording.topic}}_recording.mp4"
                mimeType: "video/mp4"
            - name: create-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "{{space_key}}"
                title: "Recording: {{get-recording.topic}}"
                body: "<p>Meeting: {{get-recording.topic}}</p><p>Duration: {{get-recording.duration}} minutes</p><p>Recording: {{upload-to-drive.webViewLink}}</p>"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "recordings"
                text: "Recording archived: {{get-recording.topic}}. Drive: {{upload-to-drive.webViewLink}}. Confluence: {{create-page.url}}"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: recordings
          path: "/meetings/{{meeting_id}}/recordings"
          inputParameters:
            - name: meeting_id
              in: path
          operations:
            - name: get-recordings
              method: GET
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/upload/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_oauth_token"
      resources:
        - name: files
          path: "/files"
          inputParameters:
            - name: uploadType
              in: query
              value: "multipart"
          operations:
            - name: upload-file
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://mckinsey.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Enriches a company profile using ZoomInfo by company domain. Returns revenue, employee count, industry, and key contacts. Used for prospect research and lead qualification.

naftiko: "0.5"
info:
  label: "ZoomInfo Company Enrichment"
  description: "Enriches a company profile using ZoomInfo by company domain. Returns revenue, employee count, industry, and key contacts. Used for prospect research and lead qualification."
  tags:
    - research
    - business-development
    - zoominfo
capability:
  exposes:
    - type: mcp
      namespace: company-enrichment
      port: 8080
      tools:
        - name: enrich-company
          description: "Enrich a company profile via ZoomInfo. Returns revenue, headcount, industry, and key contacts."
          inputParameters:
            - name: company_domain
              in: body
              type: string
              description: "Company website domain."
          call: "zoominfo.enrich-company"
          with:
            companyWebsite: "{{company_domain}}"
          outputParameters:
            - name: company_name
              type: string
              mapping: "$.data[0].name"
            - name: revenue
              type: string
              mapping: "$.data[0].revenue"
            - name: employee_count
              type: integer
              mapping: "$.data[0].employeeCount"
            - name: industry
              type: string
              mapping: "$.data[0].industry"
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: enrich
          path: "/enrich/company"
          operations:
            - name: enrich-company
              method: POST

Enriches a lead via ZoomInfo by company domain, creates or updates the account in Salesforce, and notifies the business development team via Slack.

naftiko: "0.5"
info:
  label: "ZoomInfo Lead Enrichment with Salesforce Sync"
  description: "Enriches a lead via ZoomInfo by company domain, creates or updates the account in Salesforce, and notifies the business development team via Slack."
  tags:
    - business-development
    - lead-enrichment
    - zoominfo
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: lead-enrichment
      port: 8080
      tools:
        - name: enrich-and-sync-lead
          description: "Enrich a lead via ZoomInfo, sync to Salesforce, and notify BD team via Slack."
          inputParameters:
            - name: company_domain
              in: body
              type: string
              description: "Company website domain."
            - name: bd_channel
              in: body
              type: string
              description: "Slack channel for BD team."
          steps:
            - name: enrich
              type: call
              call: "zoominfo.enrich-company"
              with:
                companyWebsite: "{{company_domain}}"
            - name: upsert-account
              type: call
              call: "salesforce.upsert-account"
              with:
                Website: "{{company_domain}}"
                Name: "{{enrich.company_name}}"
                Industry: "{{enrich.industry}}"
                NumberOfEmployees: "{{enrich.employee_count}}"
                AnnualRevenue: "{{enrich.revenue}}"
            - name: notify-bd
              type: call
              call: "slack.post-message"
              with:
                channel: "{{bd_channel}}"
                text: "Lead enriched: {{enrich.company_name}} ({{company_domain}}). Revenue: {{enrich.revenue}}. Employees: {{enrich.employee_count}}. Synced to Salesforce."
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: enrich
          path: "/enrich/company"
          operations:
            - name: enrich-company
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://mckinsey.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/Website/{{Website}}"
          inputParameters:
            - name: Website
              in: path
          operations:
            - name: upsert-account
              method: PATCH
    - 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