Wiley Capabilities

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

Sort
Expand

Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.

naftiko: "0.5"
info:
  label: "Annual Compliance Certification Orchestrator"
  description: "Manages annual compliance certifications by distributing attestations, tracking completion, and filing results."
  tags:
    - compliance
    - hr
    - legal
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: run-annual-compliance-certification-orchestrator
          description: "Manages annual compliance certifications by distributing attestations, tracking completion, and filing results."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Annual Compliance Certification Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.

naftiko: "0.5"
info:
  label: "API Lifecycle Management Orchestrator"
  description: "Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation."
  tags:
    - engineering
    - api
    - operations
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: run-api-lifecycle-management-orchestrator
          description: "Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed API Lifecycle Management Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves published article metadata by DOI from the Crossref API including title, authors, journal, and citation count.

naftiko: "0.5"
info:
  label: "Article DOI Lookup"
  description: "Retrieves published article metadata by DOI from the Crossref API including title, authors, journal, and citation count."
  tags:
    - publishing
    - research
    - crossref
    - metadata
capability:
  exposes:
    - type: mcp
      namespace: article-metadata
      port: 8080
      tools:
        - name: get-article-by-doi
          description: "Look up a published article by DOI. Returns title, authors, journal, and citations."
          inputParameters:
            - name: doi
              in: body
              type: string
              description: "The article DOI (e.g., 10.1002/example)."
          call: "crossref.get-work"
          with:
            doi: "{{doi}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.message.title[0]"
            - name: authors
              type: array
              mapping: "$.message.author"
            - name: journal
              type: string
              mapping: "$.message.container-title[0]"
            - name: citation_count
              type: integer
              mapping: "$.message.is-referenced-by-count"
            - name: published_date
              type: string
              mapping: "$.message.published.date-parts[0]"
  consumes:
    - type: http
      namespace: crossref
      baseUri: "https://api.crossref.org"
      authentication:
        type: none
      inputParameters:
        - name: User-Agent
          in: header
          value: "Wiley-Naftiko/0.5 (mailto:$secrets.crossref_contact_email)"
      resources:
        - name: works
          path: "/works/{{doi}}"
          inputParameters:
            - name: doi
              in: path
          operations:
            - name: get-work
              method: GET

When a manuscript is accepted, initiates the production workflow by creating a production ticket in ServiceNow, assigning a copyeditor, generating proofs, and notifying the author via SendGrid.

naftiko: "0.5"
info:
  label: "Article Production Workflow"
  description: "When a manuscript is accepted, initiates the production workflow by creating a production ticket in ServiceNow, assigning a copyeditor, generating proofs, and notifying the author via SendGrid."
  tags:
    - publishing
    - production
    - servicenow
    - sendgrid
capability:
  exposes:
    - type: mcp
      namespace: article-production
      port: 8080
      tools:
        - name: initiate-production
          description: "Given an accepted manuscript ID, start production by creating ticket, assigning copyeditor, and notifying author."
          inputParameters:
            - name: manuscript_id
              in: body
              type: string
              description: "The accepted manuscript identifier."
            - name: journal_code
              in: body
              type: string
              description: "The journal code."
            - name: author_email
              in: body
              type: string
              description: "The corresponding author's email."
          steps:
            - name: create-production-ticket
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Article production: {{manuscript_id}}"
                category: "content_production"
                description: "Journal: {{journal_code}}. Manuscript accepted and ready for production."
            - name: assign-copyeditor
              type: call
              call: "production.assign-copyeditor"
              with:
                manuscript_id: "{{manuscript_id}}"
                journal_code: "{{journal_code}}"
            - name: generate-proofs
              type: call
              call: "production.create-proofs"
              with:
                manuscript_id: "{{manuscript_id}}"
            - name: notify-author
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{author_email}}"
                template_id: "manuscript_accepted"
                dynamic_data:
                  manuscript_id: "{{manuscript_id}}"
                  journal: "{{journal_code}}"
                  copyeditor: "{{assign-copyeditor.name}}"
                  proof_url: "{{generate-proofs.url}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://wiley.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: production
      baseUri: "https://api.wiley.com/production/v2"
      authentication:
        type: bearer
        token: "$secrets.production_api_token"
      resources:
        - name: copyeditors
          path: "/manuscripts/{{manuscript_id}}/assign-copyeditor"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: assign-copyeditor
              method: POST
        - name: proofs
          path: "/manuscripts/{{manuscript_id}}/proofs"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: create-proofs
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Retrieves publication history for an author.

naftiko: "0.5"
info:
  label: "Author Publication History"
  description: "Retrieves publication history for an author."
  tags:
    - publishing
    - research
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-author
          description: "Retrieves publication history for an author."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The author publication history identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: author
          path: "/author/publication/history/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-author
              method: GET

Retrieves Azure DevOps pipeline status.

naftiko: "0.5"
info:
  label: "Azure DevOps Pipeline Viewer"
  description: "Retrieves Azure DevOps pipeline status."
  tags:
    - engineering
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-azure
          description: "Retrieves Azure DevOps pipeline status."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The azure devops pipeline viewer identifier."
          call: "engineering-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: engineering-api
      baseUri: "https://api.wiley.com/engineering/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: azure
          path: "/azure/devops/pipeline/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-azure
              method: GET

Retrieves a Confluence wiki page.

naftiko: "0.5"
info:
  label: "Confluence Page Viewer"
  description: "Retrieves a Confluence wiki page."
  tags:
    - collaboration
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-confluence
          description: "Retrieves a Confluence wiki page."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The confluence page viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.wiley.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: confluence
          path: "/confluence/page/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-confluence
              method: GET

Searches the Wiley content discovery API for articles matching a query, returning titles, DOIs, abstracts, and relevance scores.

naftiko: "0.5"
info:
  label: "Content Discovery Search"
  description: "Searches the Wiley content discovery API for articles matching a query, returning titles, DOIs, abstracts, and relevance scores."
  tags:
    - research
    - discovery
    - search
capability:
  exposes:
    - type: mcp
      namespace: content-discovery
      port: 8080
      tools:
        - name: search-articles
          description: "Search for articles by keyword query. Returns matching titles, DOIs, and abstracts."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query string."
            - name: journal_filter
              in: body
              type: string
              description: "Optional journal ISSN to filter results."
            - name: max_results
              in: body
              type: integer
              description: "Maximum number of results to return."
          call: "discovery.search"
          with:
            q: "{{query}}"
            journal: "{{journal_filter}}"
            limit: "{{max_results}}"
          outputParameters:
            - name: total_results
              type: integer
              mapping: "$.total"
            - name: articles
              type: array
              mapping: "$.results"
  consumes:
    - type: http
      namespace: discovery
      baseUri: "https://api.wiley.com/discovery/v1"
      authentication:
        type: bearer
        token: "$secrets.discovery_api_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search
              method: GET

When a rights licensing request comes in, validates the request, checks rights availability, creates a Salesforce opportunity, generates a license agreement, and notifies the rights team in Slack.

naftiko: "0.5"
info:
  label: "Content Rights Licensing Pipeline"
  description: "When a rights licensing request comes in, validates the request, checks rights availability, creates a Salesforce opportunity, generates a license agreement, and notifies the rights team in Slack."
  tags:
    - licensing
    - rights
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: rights-licensing
      port: 8080
      tools:
        - name: process-rights-request
          description: "Given a rights request, check availability, create opportunity, and notify team."
          inputParameters:
            - name: article_doi
              in: body
              type: string
              description: "The article DOI."
            - name: licensee_name
              in: body
              type: string
              description: "The requesting licensee name."
            - name: licensee_email
              in: body
              type: string
              description: "The licensee email."
            - name: usage_type
              in: body
              type: string
              description: "Intended usage (reprint, translation, course_pack, commercial)."
            - name: territory
              in: body
              type: string
              description: "Territory for the license."
          steps:
            - name: check-rights
              type: call
              call: "rights.check-availability"
              with:
                doi: "{{article_doi}}"
                usage_type: "{{usage_type}}"
                territory: "{{territory}}"
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Rights: {{article_doi}} - {{licensee_name}} - {{usage_type}}"
                stage: "Qualification"
                licensee: "{{licensee_name}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "rights-licensing"
                text: "Rights request: {{usage_type}} for {{article_doi}} by {{licensee_name}} ({{territory}}). Available: {{check-rights.available}}. Opportunity: {{create-opportunity.id}}"
  consumes:
    - type: http
      namespace: rights
      baseUri: "https://api.wiley.com/rights/v1"
      authentication:
        type: bearer
        token: "$secrets.rights_api_token"
      resources:
        - name: availability
          path: "/check"
          operations:
            - name: check-availability
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://wiley.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: 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

Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.

naftiko: "0.5"
info:
  label: "Cross-Functional Project Kickoff Orchestrator"
  description: "Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters."
  tags:
    - project-management
    - collaboration
    - operations
capability:
  exposes:
    - type: mcp
      namespace: project-management
      port: 8080
      tools:
        - name: run-cross-functional-project-kickoff-orchestrator
          description: "Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Cross-Functional Project Kickoff Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.

naftiko: "0.5"
info:
  label: "Customer Data Privacy Request Handler"
  description: "Handles customer data privacy requests by locating records, processing deletions, and confirming compliance."
  tags:
    - compliance
    - privacy
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: run-customer-data-privacy-request-handler
          description: "Handles customer data privacy requests by locating records, processing deletions, and confirming compliance."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Customer Data Privacy Request Handler for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.

naftiko: "0.5"
info:
  label: "Customer Journey Mapping Orchestrator"
  description: "Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations."
  tags:
    - customer-experience
    - analytics
    - product-management
capability:
  exposes:
    - type: mcp
      namespace: customer-experience
      port: 8080
      tools:
        - name: run-customer-journey-mapping-orchestrator
          description: "Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Customer Journey Mapping Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.

naftiko: "0.5"
info:
  label: "Data Governance Review Orchestrator"
  description: "Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports."
  tags:
    - data-governance
    - compliance
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: data-governance
      port: 8080
      tools:
        - name: run-data-governance-review-orchestrator
          description: "Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Data Governance Review Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves a Datadog monitor status.

naftiko: "0.5"
info:
  label: "Datadog Monitor Viewer"
  description: "Retrieves a Datadog monitor status."
  tags:
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: get-datadog
          description: "Retrieves a Datadog monitor status."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The datadog monitor viewer identifier."
          call: "monitoring-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: monitoring-api
      baseUri: "https://api.wiley.com/monitoring/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: datadog
          path: "/datadog/monitor/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-datadog
              method: GET

Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.

naftiko: "0.5"
info:
  label: "Digital Transformation Progress Orchestrator"
  description: "Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks."
  tags:
    - strategy
    - analytics
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: strategy
      port: 8080
      tools:
        - name: run-digital-transformation-progress-orchestrator
          description: "Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Digital Transformation Progress Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.

naftiko: "0.5"
info:
  label: "Disaster Recovery Test Orchestrator"
  description: "Executes disaster recovery tests by failing over systems, validating recovery, and documenting results."
  tags:
    - infrastructure
    - operations
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: run-disaster-recovery-test-orchestrator
          description: "Executes disaster recovery tests by failing over systems, validating recovery, and documenting results."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Disaster Recovery Test Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews."
  tags:
    - hr
    - identity
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-employee-offboarding-orchestrator
          description: "Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Employee Offboarding Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

On new hire creation in Workday, opens a ServiceNow ticket, provisions SharePoint, and sends a Microsoft Teams welcome.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow ticket, provisions SharePoint, and sends a Microsoft Teams welcome."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the onboarding sequence."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: department
              in: body
              type: string
              description: "The department."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding"
                folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Wiley, {{get-employee.first_name}}! Ticket: {{open-ticket.number}}. Docs: {{provision-folder.url}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://wiley.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.

naftiko: "0.5"
info:
  label: "Executive Dashboard Refresh Orchestrator"
  description: "Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI."
  tags:
    - analytics
    - power-bi
    - business
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-executive-dashboard-refresh-orchestrator
          description: "Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Executive Dashboard Refresh Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves GitHub repository information.

naftiko: "0.5"
info:
  label: "GitHub Repo Viewer"
  description: "Retrieves GitHub repository information."
  tags:
    - engineering
    - github
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-github
          description: "Retrieves GitHub repository information."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The github repo viewer identifier."
          call: "engineering-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: engineering-api
      baseUri: "https://api.wiley.com/engineering/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: github
          path: "/github/repo/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-github
              method: GET

Retrieves a document from Google Drive by file ID.

naftiko: "0.5"
info:
  label: "Google Drive Document Retrieval"
  description: "Retrieves a document from Google Drive by file ID."
  tags:
    - collaboration
    - google-drive
    - documents
capability:
  exposes:
    - type: mcp
      namespace: document-mgmt
      port: 8080
      tools:
        - name: get-drive-file
          description: "Fetch a Google Drive file's metadata by file ID."
          inputParameters:
            - name: file_id
              in: body
              type: string
              description: "The Google Drive file identifier."
          call: "gdrive.get-file"
          with:
            file_id: "{{file_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: owner
              type: string
              mapping: "$.owners[0].displayName"
            - name: modified_time
              type: string
              mapping: "$.modifiedTime"
  consumes:
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files/{{file_id}}?fields=name,owners,modifiedTime"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: get-file
              method: GET

Retrieves a file from Google Drive.

naftiko: "0.5"
info:
  label: "Google Drive File Viewer"
  description: "Retrieves a file from Google Drive."
  tags:
    - collaboration
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-google
          description: "Retrieves a file from Google Drive."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The google drive file viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.wiley.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: google
          path: "/google/drive/file/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-google
              method: GET

Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.

naftiko: "0.5"
info:
  label: "Infrastructure Capacity Planning Orchestrator"
  description: "Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests."
  tags:
    - infrastructure
    - planning
    - finance
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: run-infrastructure-capacity-planning-orchestrator
          description: "Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Infrastructure Capacity Planning Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.

naftiko: "0.5"
info:
  label: "IT Change Management Orchestrator"
  description: "Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams."
  tags:
    - it
    - servicenow
    - operations
capability:
  exposes:
    - type: mcp
      namespace: it
      port: 8080
      tools:
        - name: run-it-change-management-orchestrator
          description: "Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed IT Change Management Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves a Jira ticket by issue key.

naftiko: "0.5"
info:
  label: "Jira Ticket Viewer"
  description: "Retrieves a Jira ticket by issue key."
  tags:
    - engineering
    - jira
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-jira
          description: "Retrieves a Jira ticket by issue key."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The jira ticket viewer identifier."
          call: "engineering-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: engineering-api
      baseUri: "https://api.wiley.com/engineering/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: jira
          path: "/jira/ticket/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-jira
              method: GET

Retrieves citation metrics for a journal.

naftiko: "0.5"
info:
  label: "Journal Citation Metrics"
  description: "Retrieves citation metrics for a journal."
  tags:
    - publishing
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-journal
          description: "Retrieves citation metrics for a journal."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The journal citation metrics identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: journal
          path: "/journal/citation/metrics/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-journal
              method: GET

Aggregates journal impact metrics from Crossref, Snowflake, and internal analytics, then populates a Power BI dashboard for editorial leadership.

naftiko: "0.5"
info:
  label: "Journal Impact Metrics Dashboard"
  description: "Aggregates journal impact metrics from Crossref, Snowflake, and internal analytics, then populates a Power BI dashboard for editorial leadership."
  tags:
    - analytics
    - publishing
    - crossref
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: journal-metrics
      port: 8080
      tools:
        - name: build-impact-dashboard
          description: "Given a journal code and year, aggregate impact metrics and refresh the dashboard."
          inputParameters:
            - name: journal_code
              in: body
              type: string
              description: "The journal code or ISSN."
            - name: year
              in: body
              type: string
              description: "The reporting year."
          steps:
            - name: get-citation-data
              type: call
              call: "crossref.get-journal-stats"
              with:
                issn: "{{journal_code}}"
            - name: get-internal-metrics
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT journal_code, total_submissions, acceptance_rate, avg_review_time_days, total_downloads FROM publishing.journal_metrics WHERE journal_code = '{{journal_code}}' AND year = '{{year}}'"
                database: "WILEY_ANALYTICS"
            - name: refresh-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                group_id: "editorial_workspace"
                dataset_id: "journal_impact_metrics"
  consumes:
    - type: http
      namespace: crossref
      baseUri: "https://api.crossref.org"
      authentication:
        type: none
      resources:
        - name: journals
          path: "/journals/{{issn}}"
          inputParameters:
            - name: issn
              in: path
          operations:
            - name: get-journal-stats
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://wiley.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Retrieves COUNTER-compliant journal usage statistics for an institution and period from the usage reporting API.

naftiko: "0.5"
info:
  label: "Journal Usage Statistics Report"
  description: "Retrieves COUNTER-compliant journal usage statistics for an institution and period from the usage reporting API."
  tags:
    - subscriptions
    - analytics
    - usage-stats
    - counter
capability:
  exposes:
    - type: mcp
      namespace: usage-reporting
      port: 8080
      tools:
        - name: get-usage-stats
          description: "Fetch COUNTER usage statistics for an institution, journal, and period."
          inputParameters:
            - name: institution_id
              in: body
              type: string
              description: "The institutional subscriber identifier."
            - name: journal_issn
              in: body
              type: string
              description: "The journal ISSN."
            - name: period
              in: body
              type: string
              description: "Reporting period (e.g., 2026-01)."
          call: "usage.get-counter-report"
          with:
            customer_id: "{{institution_id}}"
            item_id: "{{journal_issn}}"
            begin_date: "{{period}}-01"
          outputParameters:
            - name: total_requests
              type: integer
              mapping: "$.report.items[0].performance[0].total"
            - name: unique_requests
              type: integer
              mapping: "$.report.items[0].performance[0].unique"
  consumes:
    - type: http
      namespace: usage
      baseUri: "https://api.wiley.com/usage/v5"
      authentication:
        type: bearer
        token: "$secrets.usage_api_token"
      resources:
        - name: counter-reports
          path: "/reports/tr_j1"
          operations:
            - name: get-counter-report
              method: GET

Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.

naftiko: "0.5"
info:
  label: "Knowledge Base Refresh Orchestrator"
  description: "Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates."
  tags:
    - knowledge-management
    - collaboration
    - operations
capability:
  exposes:
    - type: mcp
      namespace: knowledge-management
      port: 8080
      tools:
        - name: run-knowledge-base-refresh-orchestrator
          description: "Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Knowledge Base Refresh Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves the current status of a manuscript in the editorial management system.

naftiko: "0.5"
info:
  label: "Manuscript Status Lookup"
  description: "Retrieves the current status of a manuscript in the editorial management system."
  tags:
    - publishing
    - editorial
    - manuscripts
capability:
  exposes:
    - type: mcp
      namespace: editorial-tracking
      port: 8080
      tools:
        - name: get-manuscript-status
          description: "Look up a manuscript by ID. Returns status, journal, editor, and review progress."
          inputParameters:
            - name: manuscript_id
              in: body
              type: string
              description: "The manuscript identifier."
          call: "editorial.get-manuscript"
          with:
            manuscript_id: "{{manuscript_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.manuscript.status"
            - name: journal
              type: string
              mapping: "$.manuscript.journal_code"
            - name: editor
              type: string
              mapping: "$.manuscript.editor.name"
            - name: reviews_complete
              type: integer
              mapping: "$.manuscript.reviews_received"
            - name: reviews_pending
              type: integer
              mapping: "$.manuscript.reviews_pending"
  consumes:
    - type: http
      namespace: editorial
      baseUri: "https://api.wiley.com/editorial/v2"
      authentication:
        type: bearer
        token: "$secrets.editorial_api_token"
      resources:
        - name: manuscripts
          path: "/manuscripts/{{manuscript_id}}"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: get-manuscript
              method: GET

Retrieves the status of a manuscript submission.

naftiko: "0.5"
info:
  label: "Manuscript Status Viewer"
  description: "Retrieves the status of a manuscript submission."
  tags:
    - publishing
    - editorial
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-manuscript
          description: "Retrieves the status of a manuscript submission."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The manuscript status viewer identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: manuscript
          path: "/manuscript/status/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-manuscript
              method: GET

When an author submits a manuscript, creates a record in the editorial management system, assigns to a journal editor via the workflow API, creates a Salesforce case for tracking, and sends acknowledgment via SendGrid.

naftiko: "0.5"
info:
  label: "Manuscript Submission Pipeline"
  description: "When an author submits a manuscript, creates a record in the editorial management system, assigns to a journal editor via the workflow API, creates a Salesforce case for tracking, and sends acknowledgment via SendGrid."
  tags:
    - publishing
    - manuscripts
    - salesforce
    - sendgrid
    - editorial
capability:
  exposes:
    - type: mcp
      namespace: manuscript-submission
      port: 8080
      tools:
        - name: process-submission
          description: "Given manuscript details, create editorial record, assign editor, track in CRM, and acknowledge."
          inputParameters:
            - name: manuscript_id
              in: body
              type: string
              description: "The manuscript submission identifier."
            - name: journal_code
              in: body
              type: string
              description: "The target journal code."
            - name: author_email
              in: body
              type: string
              description: "The corresponding author's email."
            - name: title
              in: body
              type: string
              description: "The manuscript title."
          steps:
            - name: create-record
              type: call
              call: "editorial.create-manuscript"
              with:
                manuscript_id: "{{manuscript_id}}"
                journal_code: "{{journal_code}}"
                title: "{{title}}"
                author_email: "{{author_email}}"
            - name: assign-editor
              type: call
              call: "editorial.assign-editor"
              with:
                manuscript_id: "{{manuscript_id}}"
                journal_code: "{{journal_code}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Manuscript submission: {{manuscript_id}} - {{title}}"
                type: "Submission"
                journal: "{{journal_code}}"
            - name: send-acknowledgment
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{author_email}}"
                template_id: "submission_acknowledgment"
                dynamic_data:
                  manuscript_id: "{{manuscript_id}}"
                  title: "{{title}}"
                  journal: "{{journal_code}}"
                  editor: "{{assign-editor.editor_name}}"
  consumes:
    - type: http
      namespace: editorial
      baseUri: "https://api.wiley.com/editorial/v2"
      authentication:
        type: bearer
        token: "$secrets.editorial_api_token"
      resources:
        - name: manuscripts
          path: "/manuscripts"
          operations:
            - name: create-manuscript
              method: POST
        - name: assignments
          path: "/manuscripts/{{manuscript_id}}/assign"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: assign-editor
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://wiley.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: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Orchestrator"
  description: "Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports."
  tags:
    - marketing
    - analytics
    - finance
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: run-marketing-campaign-performance-orchestrator
          description: "Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Marketing Campaign Performance Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Sends a notification message to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notification"
  description: "Sends a notification message to a Microsoft Teams channel."
  tags:
    - collaboration
    - microsoft-teams
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: teams-messaging
      port: 8080
      tools:
        - name: send-teams-notification
          description: "Send a notification to a Microsoft Teams channel."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "The Teams team ID."
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel ID."
            - name: message
              in: body
              type: string
              description: "The notification message."
          call: "msteams.send-message"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
            text: "{{message}}"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Sends a message to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Message Sender"
  description: "Sends a message to a Microsoft Teams channel."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: communications
      port: 8080
      tools:
        - name: get-microsoft
          description: "Sends a message to a Microsoft Teams channel."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The microsoft teams message sender identifier."
          call: "communications-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: communications-api
      baseUri: "https://api.wiley.com/communications/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: microsoft
          path: "/microsoft/teams/message/sender/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-microsoft
              method: GET

When an Open Access article is accepted, verifies institutional funding agreements in Salesforce, processes the Article Processing Charge via SAP, sends the invoice to the author via SendGrid, and updates the editorial system.

naftiko: "0.5"
info:
  label: "Open Access APC Processing Pipeline"
  description: "When an Open Access article is accepted, verifies institutional funding agreements in Salesforce, processes the Article Processing Charge via SAP, sends the invoice to the author via SendGrid, and updates the editorial system."
  tags:
    - publishing
    - open-access
    - salesforce
    - sap
    - sendgrid
    - billing
capability:
  exposes:
    - type: mcp
      namespace: open-access
      port: 8080
      tools:
        - name: process-apc
          description: "Given a manuscript ID and author details, verify funding, process APC, send invoice, and update records."
          inputParameters:
            - name: manuscript_id
              in: body
              type: string
              description: "The manuscript identifier."
            - name: author_email
              in: body
              type: string
              description: "The corresponding author's email."
            - name: institution_id
              in: body
              type: string
              description: "The author's institutional affiliation ID."
            - name: journal_code
              in: body
              type: string
              description: "The journal code."
          steps:
            - name: check-funding
              type: call
              call: "salesforce.check-oa-agreement"
              with:
                institution_id: "{{institution_id}}"
                journal_code: "{{journal_code}}"
            - name: create-invoice
              type: call
              call: "sap.create-billing-document"
              with:
                customer_id: "{{institution_id}}"
                amount: "{{check-funding.apc_amount}}"
                description: "APC for {{manuscript_id}} in {{journal_code}}"
                discount: "{{check-funding.discount_pct}}"
            - name: send-invoice
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{author_email}}"
                template_id: "apc_invoice"
                dynamic_data:
                  manuscript_id: "{{manuscript_id}}"
                  amount: "{{create-invoice.net_amount}}"
                  invoice_number: "{{create-invoice.document_number}}"
            - name: update-editorial
              type: call
              call: "editorial.update-manuscript"
              with:
                manuscript_id: "{{manuscript_id}}"
                oa_status: "apc_invoiced"
                invoice_number: "{{create-invoice.document_number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wiley.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: oa-agreements
          path: "/sobjects/OA_Agreement__c"
          operations:
            - name: check-oa-agreement
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://wiley-s4.sap.com/sap/opu/odata/sap/API_BILLING_DOCUMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: billing
          path: "/A_BillingDocument"
          operations:
            - name: create-billing-document
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST
    - type: http
      namespace: editorial
      baseUri: "https://api.wiley.com/editorial/v2"
      authentication:
        type: bearer
        token: "$secrets.editorial_api_token"
      resources:
        - name: manuscripts
          path: "/manuscripts/{{manuscript_id}}"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: update-manuscript
              method: PATCH

Retrieves an author's ORCID profile including name, affiliations, and publication history.

naftiko: "0.5"
info:
  label: "ORCID Author Profile Lookup"
  description: "Retrieves an author's ORCID profile including name, affiliations, and publication history."
  tags:
    - research
    - orcid
    - author-profiles
capability:
  exposes:
    - type: mcp
      namespace: author-profiles
      port: 8080
      tools:
        - name: get-orcid-profile
          description: "Look up an author by ORCID ID. Returns name, affiliations, and work count."
          inputParameters:
            - name: orcid_id
              in: body
              type: string
              description: "The ORCID identifier (e.g., 0000-0002-1234-5678)."
          call: "orcid.get-record"
          with:
            orcid_id: "{{orcid_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.person.name.given-names.value + ' ' + $.person.name.family-name.value"
            - name: affiliations
              type: array
              mapping: "$.activities-summary.employments.affiliation-group"
            - name: works_count
              type: integer
              mapping: "$.activities-summary.works.group.length"
  consumes:
    - type: http
      namespace: orcid
      baseUri: "https://pub.orcid.org/v3.0"
      authentication:
        type: bearer
        token: "$secrets.orcid_token"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: records
          path: "/{{orcid_id}}"
          inputParameters:
            - name: orcid_id
              in: path
          operations:
            - name: get-record
              method: GET

When a manuscript needs peer review, searches for qualified reviewers in the reviewer database, sends invitation emails via SendGrid, creates tracking records in the editorial system, and notifies the editor in Slack.

naftiko: "0.5"
info:
  label: "Peer Review Assignment Orchestrator"
  description: "When a manuscript needs peer review, searches for qualified reviewers in the reviewer database, sends invitation emails via SendGrid, creates tracking records in the editorial system, and notifies the editor in Slack."
  tags:
    - peer-review
    - publishing
    - sendgrid
    - slack
    - editorial
capability:
  exposes:
    - type: mcp
      namespace: peer-review
      port: 8080
      tools:
        - name: assign-reviewers
          description: "Given a manuscript ID, find reviewers, send invitations, create tracking records, and notify editor."
          inputParameters:
            - name: manuscript_id
              in: body
              type: string
              description: "The manuscript identifier."
            - name: subject_area
              in: body
              type: string
              description: "The manuscript subject area for reviewer matching."
            - name: reviewer_count
              in: body
              type: integer
              description: "Number of reviewers to invite."
            - name: editor_email
              in: body
              type: string
              description: "The handling editor's email."
          steps:
            - name: find-reviewers
              type: call
              call: "editorial.search-reviewers"
              with:
                subject_area: "{{subject_area}}"
                count: "{{reviewer_count}}"
                exclude_authors: "{{manuscript_id}}"
            - name: send-invitations
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{find-reviewers.emails}}"
                template_id: "reviewer_invitation"
                dynamic_data:
                  manuscript_id: "{{manuscript_id}}"
                  subject_area: "{{subject_area}}"
            - name: create-review-records
              type: call
              call: "editorial.create-review-assignments"
              with:
                manuscript_id: "{{manuscript_id}}"
                reviewer_ids: "{{find-reviewers.reviewer_ids}}"
            - name: notify-editor
              type: call
              call: "slack.post-message"
              with:
                channel: "editorial-ops"
                text: "Peer review invitations sent for {{manuscript_id}}. {{reviewer_count}} reviewers invited in {{subject_area}}. Pending responses."
  consumes:
    - type: http
      namespace: editorial
      baseUri: "https://api.wiley.com/editorial/v2"
      authentication:
        type: bearer
        token: "$secrets.editorial_api_token"
      resources:
        - name: reviewers
          path: "/reviewers/search"
          operations:
            - name: search-reviewers
              method: POST
        - name: review-assignments
          path: "/manuscripts/{{manuscript_id}}/reviews"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: create-review-assignments
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              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

Checks the status of peer reviews for a manuscript.

naftiko: "0.5"
info:
  label: "Peer Review Status Check"
  description: "Checks the status of peer reviews for a manuscript."
  tags:
    - publishing
    - editorial
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-peer
          description: "Checks the status of peer reviews for a manuscript."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The peer review status check identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: peer
          path: "/peer/review/status/check/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-peer
              method: GET

When a manuscript is submitted, runs a plagiarism check via the similarity detection service, logs results in the editorial system, and alerts the editor in Slack if similarity exceeds threshold.

naftiko: "0.5"
info:
  label: "Plagiarism Detection Orchestrator"
  description: "When a manuscript is submitted, runs a plagiarism check via the similarity detection service, logs results in the editorial system, and alerts the editor in Slack if similarity exceeds threshold."
  tags:
    - peer-review
    - publishing
    - plagiarism
    - slack
capability:
  exposes:
    - type: mcp
      namespace: integrity-checks
      port: 8080
      tools:
        - name: run-plagiarism-check
          description: "Given a manuscript ID, run similarity check, log results, and alert if high similarity."
          inputParameters:
            - name: manuscript_id
              in: body
              type: string
              description: "The manuscript identifier."
            - name: similarity_threshold
              in: body
              type: number
              description: "Similarity percentage threshold for alerting (e.g., 20)."
          steps:
            - name: run-check
              type: call
              call: "similarity.check-manuscript"
              with:
                manuscript_id: "{{manuscript_id}}"
            - name: log-results
              type: call
              call: "editorial.update-manuscript"
              with:
                manuscript_id: "{{manuscript_id}}"
                similarity_score: "{{run-check.similarity_pct}}"
                similarity_report_url: "{{run-check.report_url}}"
            - name: alert-editor
              type: call
              call: "slack.post-message"
              with:
                channel: "editorial-integrity"
                text: "Similarity check for {{manuscript_id}}: {{run-check.similarity_pct}}% (threshold: {{similarity_threshold}}%). Report: {{run-check.report_url}}"
  consumes:
    - type: http
      namespace: similarity
      baseUri: "https://api.wiley.com/similarity/v1"
      authentication:
        type: bearer
        token: "$secrets.similarity_api_token"
      resources:
        - name: checks
          path: "/manuscripts/{{manuscript_id}}/check"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: check-manuscript
              method: POST
    - type: http
      namespace: editorial
      baseUri: "https://api.wiley.com/editorial/v2"
      authentication:
        type: bearer
        token: "$secrets.editorial_api_token"
      resources:
        - name: manuscripts
          path: "/manuscripts/{{manuscript_id}}"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: update-manuscript
              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

Triggers a Power BI dataset refresh for publishing and subscription analytics dashboards.

naftiko: "0.5"
info:
  label: "Power BI Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for publishing and subscription analytics dashboards."
  tags:
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: refresh-dataset
          description: "Trigger a Power BI dataset refresh."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.trigger-refresh"
          with:
            group_id: "{{workspace_id}}"
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Triggers a Power BI dataset refresh.

naftiko: "0.5"
info:
  label: "Power BI Dashboard Refresher"
  description: "Triggers a Power BI dataset refresh."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-power
          description: "Triggers a Power BI dataset refresh."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The power bi dashboard refresher identifier."
          call: "analytics-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://api.wiley.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: power
          path: "/power/bi/dashboard/refresher/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-power
              method: GET

Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.

naftiko: "0.5"
info:
  label: "Procurement Spend Analysis Orchestrator"
  description: "Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports."
  tags:
    - procurement
    - analytics
    - finance
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: run-procurement-spend-analysis-orchestrator
          description: "Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Procurement Spend Analysis Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 1"
  description: "Orchestrates publishing workflow 1 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-001
          description: "Orchestrates publishing workflow 1 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 1 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 2"
  description: "Orchestrates publishing workflow 2 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-002
          description: "Orchestrates publishing workflow 2 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 2 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 3.

naftiko: "0.5"
info:
  label: "Publishing Data Query 3"
  description: "Retrieves publishing operational data for workflow 3."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-3
          description: "Query publishing data for workflow 3."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-3
              method: GET

Orchestrates publishing workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 4"
  description: "Orchestrates publishing workflow 4 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-004
          description: "Orchestrates publishing workflow 4 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 4 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 5"
  description: "Orchestrates publishing workflow 5 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-005
          description: "Orchestrates publishing workflow 5 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 5 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 6.

naftiko: "0.5"
info:
  label: "Publishing Data Query 6"
  description: "Retrieves publishing operational data for workflow 6."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-6
          description: "Query publishing data for workflow 6."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-6
              method: GET

Orchestrates publishing workflow 7 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 7"
  description: "Orchestrates publishing workflow 7 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-007
          description: "Orchestrates publishing workflow 7 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 7 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 8 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 8"
  description: "Orchestrates publishing workflow 8 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-008
          description: "Orchestrates publishing workflow 8 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 8 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 9.

naftiko: "0.5"
info:
  label: "Publishing Data Query 9"
  description: "Retrieves publishing operational data for workflow 9."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-9
          description: "Query publishing data for workflow 9."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-9
              method: GET

Orchestrates publishing workflow 10 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 10"
  description: "Orchestrates publishing workflow 10 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-010
          description: "Orchestrates publishing workflow 10 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 10 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 11 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 11"
  description: "Orchestrates publishing workflow 11 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-011
          description: "Orchestrates publishing workflow 11 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 11 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 12.

naftiko: "0.5"
info:
  label: "Publishing Data Query 12"
  description: "Retrieves publishing operational data for workflow 12."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-12
          description: "Query publishing data for workflow 12."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-12
              method: GET

Orchestrates publishing workflow 13 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 13"
  description: "Orchestrates publishing workflow 13 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-013
          description: "Orchestrates publishing workflow 13 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 13 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 14 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 14"
  description: "Orchestrates publishing workflow 14 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-014
          description: "Orchestrates publishing workflow 14 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 14 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 15.

naftiko: "0.5"
info:
  label: "Publishing Data Query 15"
  description: "Retrieves publishing operational data for workflow 15."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-15
          description: "Query publishing data for workflow 15."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-15
              method: GET

Orchestrates publishing workflow 16 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 16"
  description: "Orchestrates publishing workflow 16 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-016
          description: "Orchestrates publishing workflow 16 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 16 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 17 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 17"
  description: "Orchestrates publishing workflow 17 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-017
          description: "Orchestrates publishing workflow 17 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 17 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 18.

naftiko: "0.5"
info:
  label: "Publishing Data Query 18"
  description: "Retrieves publishing operational data for workflow 18."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-18
          description: "Query publishing data for workflow 18."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-18
              method: GET

Orchestrates publishing workflow 19 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 19"
  description: "Orchestrates publishing workflow 19 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-019
          description: "Orchestrates publishing workflow 19 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 19 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 20 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 20"
  description: "Orchestrates publishing workflow 20 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-020
          description: "Orchestrates publishing workflow 20 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 20 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 21.

naftiko: "0.5"
info:
  label: "Publishing Data Query 21"
  description: "Retrieves publishing operational data for workflow 21."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-21
          description: "Query publishing data for workflow 21."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-21
              method: GET

Orchestrates publishing workflow 22 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 22"
  description: "Orchestrates publishing workflow 22 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-022
          description: "Orchestrates publishing workflow 22 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 22 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 23 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 23"
  description: "Orchestrates publishing workflow 23 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-023
          description: "Orchestrates publishing workflow 23 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 23 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 24.

naftiko: "0.5"
info:
  label: "Publishing Data Query 24"
  description: "Retrieves publishing operational data for workflow 24."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-24
          description: "Query publishing data for workflow 24."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-24
              method: GET

Orchestrates publishing workflow 25 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 25"
  description: "Orchestrates publishing workflow 25 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-025
          description: "Orchestrates publishing workflow 25 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 25 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 26 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 26"
  description: "Orchestrates publishing workflow 26 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-026
          description: "Orchestrates publishing workflow 26 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 26 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves publishing operational data for workflow 27.

naftiko: "0.5"
info:
  label: "Publishing Data Query 27"
  description: "Retrieves publishing operational data for workflow 27."
  tags:
    - publishing
    - operations
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-data-27
          description: "Query publishing data for workflow 27."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-27
              method: GET

Orchestrates publishing workflow 28 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 28"
  description: "Orchestrates publishing workflow 28 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-028
          description: "Orchestrates publishing workflow 28 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 28 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates publishing workflow 29 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Publishing Workflow 29"
  description: "Orchestrates publishing workflow 29 by coordinating across systems, validating data, and sending notifications."
  tags:
    - publishing
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: run-publishing-workflow-029
          description: "Orchestrates publishing workflow 29 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Publishing Workflow 29 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.

naftiko: "0.5"
info:
  label: "Quarterly Business Review Orchestrator"
  description: "Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders."
  tags:
    - analytics
    - business
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-quarterly-business-review-orchestrator
          description: "Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Quarterly Business Review Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

When an author submits supplementary research data, uploads to the research data repository, generates a data DOI, links it to the article record, and notifies the data team in Slack.

naftiko: "0.5"
info:
  label: "Research Data Repository Upload Pipeline"
  description: "When an author submits supplementary research data, uploads to the research data repository, generates a data DOI, links it to the article record, and notifies the data team in Slack."
  tags:
    - research
    - data-repository
    - publishing
    - slack
capability:
  exposes:
    - type: mcp
      namespace: research-data
      port: 8080
      tools:
        - name: publish-research-data
          description: "Given a manuscript ID and data package, upload to repository, mint DOI, link to article, and notify."
          inputParameters:
            - name: manuscript_id
              in: body
              type: string
              description: "The associated manuscript identifier."
            - name: dataset_title
              in: body
              type: string
              description: "Title of the research dataset."
            - name: data_file_url
              in: body
              type: string
              description: "URL to the data package file."
            - name: author_email
              in: body
              type: string
              description: "The data author's email."
          steps:
            - name: upload-data
              type: call
              call: "repository.upload-dataset"
              with:
                title: "{{dataset_title}}"
                file_url: "{{data_file_url}}"
                manuscript_id: "{{manuscript_id}}"
            - name: mint-doi
              type: call
              call: "repository.create-doi"
              with:
                dataset_id: "{{upload-data.dataset_id}}"
                title: "{{dataset_title}}"
            - name: link-to-article
              type: call
              call: "editorial.add-supplementary-data"
              with:
                manuscript_id: "{{manuscript_id}}"
                data_doi: "{{mint-doi.doi}}"
                data_url: "{{upload-data.url}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "research-data"
                text: "Research data published for {{manuscript_id}}: {{dataset_title}}. DOI: {{mint-doi.doi}}. Repository: {{upload-data.url}}"
  consumes:
    - type: http
      namespace: repository
      baseUri: "https://api.wiley.com/data-repository/v1"
      authentication:
        type: bearer
        token: "$secrets.repository_api_token"
      resources:
        - name: datasets
          path: "/datasets"
          operations:
            - name: upload-dataset
              method: POST
        - name: dois
          path: "/datasets/{{dataset_id}}/doi"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: create-doi
              method: POST
    - type: http
      namespace: editorial
      baseUri: "https://api.wiley.com/editorial/v2"
      authentication:
        type: bearer
        token: "$secrets.editorial_api_token"
      resources:
        - name: supplementary
          path: "/manuscripts/{{manuscript_id}}/supplementary"
          inputParameters:
            - name: manuscript_id
              in: path
          operations:
            - name: add-supplementary-data
              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 article retraction is approved, updates the article metadata in the content system, registers the retraction with Crossref, notifies indexing services, and alerts the editorial team in Slack.

naftiko: "0.5"
info:
  label: "Retraction Notice Pipeline"
  description: "When an article retraction is approved, updates the article metadata in the content system, registers the retraction with Crossref, notifies indexing services, and alerts the editorial team in Slack."
  tags:
    - publishing
    - peer-review
    - crossref
    - slack
    - integrity
capability:
  exposes:
    - type: mcp
      namespace: article-retraction
      port: 8080
      tools:
        - name: process-retraction
          description: "Given an article DOI and retraction reason, update metadata, register with Crossref, and notify."
          inputParameters:
            - name: article_doi
              in: body
              type: string
              description: "The article DOI to retract."
            - name: retraction_reason
              in: body
              type: string
              description: "The reason for retraction."
            - name: journal_code
              in: body
              type: string
              description: "The journal code."
          steps:
            - name: update-metadata
              type: call
              call: "content.update-article-status"
              with:
                doi: "{{article_doi}}"
                status: "retracted"
                retraction_reason: "{{retraction_reason}}"
            - name: register-crossref
              type: call
              call: "crossref.register-retraction"
              with:
                doi: "{{article_doi}}"
                reason: "{{retraction_reason}}"
            - name: alert-team
              type: call
              call: "slack.post-message"
              with:
                channel: "editorial-integrity"
                text: "RETRACTION NOTICE: {{article_doi}} ({{journal_code}}). Reason: {{retraction_reason}}. Crossref updated. Indexing services notified."
  consumes:
    - type: http
      namespace: content
      baseUri: "https://api.wiley.com/content/v2"
      authentication:
        type: bearer
        token: "$secrets.content_api_token"
      resources:
        - name: articles
          path: "/articles/{{doi}}"
          inputParameters:
            - name: doi
              in: path
          operations:
            - name: update-article-status
              method: PATCH
    - type: http
      namespace: crossref
      baseUri: "https://doi.crossref.org"
      authentication:
        type: basic
        username: "$secrets.crossref_user"
        password: "$secrets.crossref_password"
      resources:
        - name: deposits
          path: "/servlet/deposit"
          operations:
            - name: register-retraction
              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

Queries Snowflake for reviewer performance metrics and generates a summary for editorial boards.

naftiko: "0.5"
info:
  label: "Reviewer Performance Report"
  description: "Queries Snowflake for reviewer performance metrics and generates a summary for editorial boards."
  tags:
    - peer-review
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: reviewer-analytics
      port: 8080
      tools:
        - name: get-reviewer-performance
          description: "Fetch reviewer performance metrics for a journal and period."
          inputParameters:
            - name: journal_code
              in: body
              type: string
              description: "The journal code."
            - name: year
              in: body
              type: string
              description: "The reporting year."
          call: "snowflake.execute-query"
          with:
            statement: "SELECT reviewer_id, reviews_completed, avg_turnaround_days, avg_quality_score, invitation_acceptance_rate FROM publishing.reviewer_metrics WHERE journal_code = '{{journal_code}}' AND year = '{{year}}' ORDER BY avg_quality_score DESC"
            database: "WILEY_ANALYTICS"
          outputParameters:
            - name: results
              type: array
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wiley.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Retrieves a Salesforce institutional account by ID and returns name, subscription tier, and contract details.

naftiko: "0.5"
info:
  label: "Salesforce Account Lookup"
  description: "Retrieves a Salesforce institutional account by ID and returns name, subscription tier, and contract details."
  tags:
    - crm
    - salesforce
    - subscriptions
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-institution-account
          description: "Look up a Salesforce institutional account by ID."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: subscription_tier
              type: string
              mapping: "$.Subscription_Tier__c"
            - name: contract_end
              type: string
              mapping: "$.Contract_End_Date__c"
            - name: total_journals
              type: integer
              mapping: "$.Total_Journals__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wiley.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Retrieves a Salesforce account by account ID.

naftiko: "0.5"
info:
  label: "Salesforce Account Viewer"
  description: "Retrieves a Salesforce account by account ID."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: get-salesforce
          description: "Retrieves a Salesforce account by account ID."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The salesforce account viewer identifier."
          call: "sales-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: sales-api
      baseUri: "https://api.wiley.com/sales/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: salesforce
          path: "/salesforce/account/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-salesforce
              method: GET

When an expense report is submitted in SAP Concur, validates and posts to SAP S/4HANA, and notifies finance.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Sync"
  description: "When an expense report is submitted in SAP Concur, validates and posts to SAP S/4HANA, and notifies finance."
  tags:
    - finance
    - sap-concur
    - sap-s4hana
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: expense-management
      port: 8080
      tools:
        - name: sync-expense-report
          description: "Given a Concur expense report ID, validate, post to SAP, and notify finance."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report identifier."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: post-to-sap
              type: call
              call: "sap.create-expense-entry"
              with:
                amount: "{{get-report.total_amount}}"
                currency: "{{get-report.currency_code}}"
                cost_center: "{{get-report.cost_center}}"
            - name: notify-finance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "finance-expenses"
                text: "Expense report {{report_id}} for {{get-report.total_amount}} posted to SAP. Document: {{post-to-sap.document_number}}"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://wiley-s4.sap.com/sap/opu/odata/sap/API_FINANCIALACCOUNTING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: journal-entries
          path: "/A_JournalEntry"
          operations:
            - name: create-expense-entry
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Looks up a SAP purchase order by number.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP purchase order by number."
  tags:
    - procurement
    - sap
    - purchase-order
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order by PO number."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wiley-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves a SAP purchase order by number.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Viewer"
  description: "Retrieves a SAP purchase order by number."
  tags:
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-sap
          description: "Retrieves a SAP purchase order by number."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The sap purchase order viewer identifier."
          call: "procurement-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: procurement-api
      baseUri: "https://api.wiley.com/procurement/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: sap
          path: "/sap/purchase/order/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-sap
              method: GET

Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.

naftiko: "0.5"
info:
  label: "Security Audit Orchestrator"
  description: "Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation."
  tags:
    - security
    - servicenow
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: run-security-audit-orchestrator
          description: "Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Security Audit Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Creates a new incident in ServiceNow.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Creator"
  description: "Creates a new incident in ServiceNow."
  tags:
    - it
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it
      port: 8080
      tools:
        - name: get-servicenow
          description: "Creates a new incident in ServiceNow."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The servicenow incident creator identifier."
          call: "it-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: it-api
      baseUri: "https://api.wiley.com/it/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: servicenow
          path: "/servicenow/incident/creator/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-servicenow
              method: GET

Retrieves a ServiceNow incident by number and returns status, priority, and assigned group.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Retrieves a ServiceNow incident by number and returns status, priority, and assigned group."
  tags:
    - it-ops
    - servicenow
    - incident
capability:
  exposes:
    - type: mcp
      namespace: it-service
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://wiley.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{number}}"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET

Retrieves a document from SharePoint.

naftiko: "0.5"
info:
  label: "SharePoint Document Viewer"
  description: "Retrieves a document from SharePoint."
  tags:
    - collaboration
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-sharepoint
          description: "Retrieves a document from SharePoint."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The sharepoint document viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.wiley.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: sharepoint
          path: "/sharepoint/document/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-sharepoint
              method: GET

Posts a formatted message to a specified Slack channel.

naftiko: "0.5"
info:
  label: "Slack Channel Message Post"
  description: "Posts a formatted message to a specified Slack channel."
  tags:
    - collaboration
    - slack
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: messaging
      port: 8080
      tools:
        - name: post-slack-message
          description: "Post a message to a Slack channel."
          inputParameters:
            - name: channel
              in: body
              type: string
              description: "The Slack channel name or ID."
            - name: text
              in: body
              type: string
              description: "The message text."
          call: "slack.post-message"
          with:
            channel: "{{channel}}"
            text: "{{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

Sends a notification to a Slack channel.

naftiko: "0.5"
info:
  label: "Slack Notification Publisher"
  description: "Sends a notification to a Slack channel."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: communications
      port: 8080
      tools:
        - name: get-slack
          description: "Sends a notification to a Slack channel."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The slack notification publisher identifier."
          call: "communications-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: communications-api
      baseUri: "https://api.wiley.com/communications/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: slack
          path: "/slack/notification/publisher/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-slack
              method: GET

Runs an analytics query against the Snowflake data warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Analytics Query"
  description: "Runs an analytics query against the Snowflake data warehouse."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-snowflake
          description: "Runs an analytics query against the Snowflake data warehouse."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The snowflake analytics query identifier."
          call: "analytics-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://api.wiley.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: snowflake
          path: "/snowflake/analytics/query/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-snowflake
              method: GET

Executes a publishing analytics query against Snowflake for submissions, reviews, and publication metrics.

naftiko: "0.5"
info:
  label: "Snowflake Publishing Analytics Query"
  description: "Executes a publishing analytics query against Snowflake for submissions, reviews, and publication metrics."
  tags:
    - analytics
    - snowflake
    - publishing
capability:
  exposes:
    - type: mcp
      namespace: publishing-analytics
      port: 8080
      tools:
        - name: query-publishing-metrics
          description: "Run a publishing analytics query on Snowflake for a journal and period."
          inputParameters:
            - name: journal_code
              in: body
              type: string
              description: "The journal code."
            - name: year
              in: body
              type: string
              description: "The reporting year."
          call: "snowflake.execute-query"
          with:
            statement: "SELECT month, total_submissions, acceptance_rate, avg_review_days, total_published FROM publishing.monthly_metrics WHERE journal_code = '{{journal_code}}' AND year = '{{year}}' ORDER BY month"
            database: "WILEY_ANALYTICS"
          outputParameters:
            - name: results
              type: array
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wiley.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

When a special issue is proposed, creates a project in Salesforce, sets up a shared workspace in SharePoint, notifies the editorial board in Microsoft Teams, and opens a timeline tracking sheet in Google Sheets.

naftiko: "0.5"
info:
  label: "Special Issue Proposal Workflow"
  description: "When a special issue is proposed, creates a project in Salesforce, sets up a shared workspace in SharePoint, notifies the editorial board in Microsoft Teams, and opens a timeline tracking sheet in Google Sheets."
  tags:
    - publishing
    - special-issues
    - salesforce
    - sharepoint
    - microsoft-teams
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: special-issues
      port: 8080
      tools:
        - name: launch-special-issue
          description: "Given proposal details, create project, set up workspace, notify board, and create timeline."
          inputParameters:
            - name: journal_code
              in: body
              type: string
              description: "The journal code."
            - name: issue_title
              in: body
              type: string
              description: "The special issue title."
            - name: guest_editor_email
              in: body
              type: string
              description: "The guest editor's email."
            - name: submission_deadline
              in: body
              type: string
              description: "Submission deadline in YYYY-MM-DD format."
          steps:
            - name: create-project
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Special Issue: {{issue_title}} ({{journal_code}})"
                stage: "Planning"
                close_date: "{{submission_deadline}}"
            - name: create-workspace
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "special_issues"
                folder_path: "{{journal_code}}/{{issue_title}}"
            - name: notify-board
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "editorial-{{journal_code}}"
                text: "New special issue proposed: {{issue_title}} for {{journal_code}}. Guest editor: {{guest_editor_email}}. Deadline: {{submission_deadline}}. Workspace: {{create-workspace.url}}"
            - name: create-timeline
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Timeline: {{issue_title}} - {{journal_code}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wiley.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST

Verifies whether an institution has active subscription access to a specific journal or content collection.

naftiko: "0.5"
info:
  label: "Subscription Access Verification"
  description: "Verifies whether an institution has active subscription access to a specific journal or content collection."
  tags:
    - subscriptions
    - access
    - entitlements
capability:
  exposes:
    - type: mcp
      namespace: subscription-access
      port: 8080
      tools:
        - name: verify-access
          description: "Check if an institution has active access to a journal or collection."
          inputParameters:
            - name: institution_id
              in: body
              type: string
              description: "The institutional subscriber identifier."
            - name: journal_code
              in: body
              type: string
              description: "The journal ISSN or code."
          call: "entitlements.check-access"
          with:
            institution_id: "{{institution_id}}"
            resource_id: "{{journal_code}}"
          outputParameters:
            - name: has_access
              type: boolean
              mapping: "$.entitlement.active"
            - name: subscription_type
              type: string
              mapping: "$.entitlement.type"
            - name: expiry_date
              type: string
              mapping: "$.entitlement.end_date"
  consumes:
    - type: http
      namespace: entitlements
      baseUri: "https://api.wiley.com/entitlements/v1"
      authentication:
        type: bearer
        token: "$secrets.entitlements_api_token"
      resources:
        - name: access
          path: "/institutions/{{institution_id}}/access/{{resource_id}}"
          inputParameters:
            - name: institution_id
              in: path
            - name: resource_id
              in: path
          operations:
            - name: check-access
              method: GET

When an institutional subscription approaches renewal, retrieves account details from Salesforce, generates a renewal proposal in Google Sheets, sends it via SendGrid, and creates a follow-up task.

naftiko: "0.5"
info:
  label: "Subscription Renewal Pipeline"
  description: "When an institutional subscription approaches renewal, retrieves account details from Salesforce, generates a renewal proposal in Google Sheets, sends it via SendGrid, and creates a follow-up task."
  tags:
    - subscriptions
    - salesforce
    - google-sheets
    - sendgrid
    - renewals
capability:
  exposes:
    - type: mcp
      namespace: subscription-renewal
      port: 8080
      tools:
        - name: initiate-renewal
          description: "Given a Salesforce account ID, generate renewal proposal, send to contact, and create follow-up."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce institutional account ID."
            - name: renewal_year
              in: body
              type: string
              description: "The renewal year."
          steps:
            - name: get-account
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{account_id}}"
            - name: get-usage
              type: call
              call: "usage.get-annual-summary"
              with:
                customer_id: "{{account_id}}"
                year: "{{renewal_year}}"
            - name: create-proposal
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Renewal Proposal: {{get-account.name}} - {{renewal_year}}"
            - name: send-proposal
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{get-account.contact_email}}"
                template_id: "subscription_renewal"
                dynamic_data:
                  institution_name: "{{get-account.name}}"
                  current_tier: "{{get-account.subscription_tier}}"
                  usage_summary: "{{get-usage.total_downloads}}"
                  proposal_url: "{{create-proposal.url}}"
            - name: create-task
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Follow up on renewal: {{get-account.name}}"
                due_date_offset: "14"
                priority: "High"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wiley.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: usage
      baseUri: "https://api.wiley.com/usage/v5"
      authentication:
        type: bearer
        token: "$secrets.usage_api_token"
      resources:
        - name: annual-summary
          path: "/reports/summary"
          operations:
            - name: get-annual-summary
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              method: POST

Retrieves content usage statistics for a subscriber.

naftiko: "0.5"
info:
  label: "Subscription Usage Report"
  description: "Retrieves content usage statistics for a subscriber."
  tags:
    - publishing
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: publishing
      port: 8080
      tools:
        - name: get-subscription
          description: "Retrieves content usage statistics for a subscriber."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The subscription usage report identifier."
          call: "publishing-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: publishing-api
      baseUri: "https://api.wiley.com/publishing/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: subscription
          path: "/subscription/usage/report/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-subscription
              method: GET

Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.

naftiko: "0.5"
info:
  label: "Sustainability Metrics Collection Orchestrator"
  description: "Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports."
  tags:
    - sustainability
    - analytics
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: run-sustainability-metrics-collection-orchestrator
          description: "Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Sustainability Metrics Collection Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

When a professor adopts a Wiley textbook, creates a Salesforce opportunity, provisions digital access in the LMS integration, sends welcome materials via SendGrid, and notifies the sales rep in Slack.

naftiko: "0.5"
info:
  label: "Textbook Adoption Pipeline"
  description: "When a professor adopts a Wiley textbook, creates a Salesforce opportunity, provisions digital access in the LMS integration, sends welcome materials via SendGrid, and notifies the sales rep in Slack."
  tags:
    - publishing
    - textbooks
    - salesforce
    - sendgrid
    - slack
capability:
  exposes:
    - type: mcp
      namespace: textbook-adoption
      port: 8080
      tools:
        - name: process-adoption
          description: "Given adoption details, create opportunity, provision access, send materials, and notify sales."
          inputParameters:
            - name: professor_email
              in: body
              type: string
              description: "The adopting professor's email."
            - name: isbn
              in: body
              type: string
              description: "The textbook ISBN."
            - name: institution_name
              in: body
              type: string
              description: "The institution name."
            - name: course_name
              in: body
              type: string
              description: "The course name."
            - name: student_count
              in: body
              type: integer
              description: "Expected number of students."
          steps:
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Adoption: {{isbn}} - {{institution_name}} - {{course_name}}"
                stage: "Adopted"
                amount_estimate: "{{student_count}}"
            - name: provision-access
              type: call
              call: "lms.provision-course-materials"
              with:
                isbn: "{{isbn}}"
                professor_email: "{{professor_email}}"
                student_count: "{{student_count}}"
            - name: send-materials
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{professor_email}}"
                template_id: "textbook_adoption_welcome"
                dynamic_data:
                  isbn: "{{isbn}}"
                  course: "{{course_name}}"
                  access_url: "{{provision-access.url}}"
            - name: notify-sales
              type: call
              call: "slack.post-message"
              with:
                channel: "textbook-adoptions"
                text: "New adoption: {{isbn}} at {{institution_name}} for {{course_name}} ({{student_count}} students). Opportunity: {{create-opportunity.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wiley.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: lms
      baseUri: "https://api.wiley.com/lms-integration/v1"
      authentication:
        type: bearer
        token: "$secrets.lms_api_token"
      resources:
        - name: course-materials
          path: "/provisions"
          operations:
            - name: provision-course-materials
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              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

Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.

naftiko: "0.5"
info:
  label: "Third Party Risk Assessment Orchestrator"
  description: "Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans."
  tags:
    - risk
    - procurement
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: risk
      port: 8080
      tools:
        - name: run-third-party-risk-assessment-orchestrator
          description: "Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Third Party Risk Assessment Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.

naftiko: "0.5"
info:
  label: "Vendor Contract Renewal Pipeline"
  description: "Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign."
  tags:
    - procurement
    - legal
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: run-vendor-contract-renewal-pipeline
          description: "Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Vendor Contract Renewal Pipeline for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.wiley.com/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.wiley.com/v2"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves employee details from Workday.

naftiko: "0.5"
info:
  label: "Workday Employee Directory Lookup"
  description: "Retrieves employee details from Workday."
  tags:
    - hr
    - workday
    - employee
capability:
  exposes:
    - type: mcp
      namespace: hr-directory
      port: 8080
      tools:
        - name: get-employee
          description: "Look up a Workday employee by worker ID."
          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: "$.worker.name.full"
            - name: department
              type: string
              mapping: "$.worker.organization.name"
            - name: manager
              type: string
              mapping: "$.worker.manager.name.full"
            - name: email
              type: string
              mapping: "$.worker.contact.email"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Retrieves employee profile from Workday.

naftiko: "0.5"
info:
  label: "Workday Employee Profile"
  description: "Retrieves employee profile from Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-workday
          description: "Retrieves employee profile from Workday."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The workday employee profile identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.wiley.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.wiley_api_token"
      resources:
        - name: workday
          path: "/workday/employee/profile/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-workday
              method: GET

Creates a Zoom webinar for author workshops or editorial board meetings, sends invitations via SendGrid, and posts to Slack.

naftiko: "0.5"
info:
  label: "Zoom Webinar Scheduler"
  description: "Creates a Zoom webinar for author workshops or editorial board meetings, sends invitations via SendGrid, and posts to Slack."
  tags:
    - collaboration
    - zoom
    - sendgrid
    - slack
    - events
capability:
  exposes:
    - type: mcp
      namespace: webinar-mgmt
      port: 8080
      tools:
        - name: schedule-webinar
          description: "Given webinar details, create Zoom webinar, send invites, and announce."
          inputParameters:
            - name: topic
              in: body
              type: string
              description: "The webinar topic."
            - name: start_time
              in: body
              type: string
              description: "Start time in ISO 8601 format."
            - name: duration_minutes
              in: body
              type: integer
              description: "Duration in minutes."
            - name: panelist_emails
              in: body
              type: string
              description: "Comma-separated panelist emails."
          steps:
            - name: create-webinar
              type: call
              call: "zoom.create-webinar"
              with:
                topic: "{{topic}}"
                start_time: "{{start_time}}"
                duration: "{{duration_minutes}}"
            - name: send-invites
              type: call
              call: "sendgrid.send-email"
              with:
                to: "{{panelist_emails}}"
                template_id: "webinar_invitation"
                dynamic_data:
                  topic: "{{topic}}"
                  start_time: "{{start_time}}"
                  join_url: "{{create-webinar.join_url}}"
            - name: announce
              type: call
              call: "slack.post-message"
              with:
                channel: "events-webinars"
                text: "Webinar scheduled: {{topic}} at {{start_time}}. Registration: {{create-webinar.registration_url}}"
  consumes:
    - type: http
      namespace: zoom
      baseUri: "https://api.zoom.us/v2"
      authentication:
        type: bearer
        token: "$secrets.zoom_token"
      resources:
        - name: webinars
          path: "/users/me/webinars"
          operations:
            - name: create-webinar
              method: POST
    - type: http
      namespace: sendgrid
      baseUri: "https://api.sendgrid.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sendgrid_api_key"
      resources:
        - name: mail
          path: "/mail/send"
          operations:
            - name: send-email
              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