Green Thumb Industries Capabilities
Naftiko 0.5 capability definitions for Green Thumb Industries - 100 capabilities showing integration workflows and service orchestrations.
Reviews access at GTI via Okta, IAM, and Jira.
naftiko: "0.5"
info:
label: "Access Review Pipeline"
description: "Reviews access at GTI via Okta, IAM, and Jira."
tags:
- security
- access-management
- okta
- compliance
capability:
exposes:
- type: mcp
namespace: access-rev
port: 8080
tools:
- name: review
description: "Review access at GTI."
inputParameters:
- name: dept
in: body
type: string
description: "Department."
steps:
- name: ent
type: call
call: "okta.get-users"
with:
dept: "{{dept}}"
- name: compare
type: call
call: "iam.compare"
with:
data: "{{ent.data}}"
- name: flag
type: call
call: "iam.flag"
with:
violations: "{{compare.violations}}"
- name: fix
type: call
call: "jira.create-issue"
with:
project: "IAM"
summary: "Violations in {{dept}}"
consumes:
- type: http
namespace: okta
baseUri: "https://gtigrows.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-users
method: GET
- type: http
namespace: iam
baseUri: "https://iam.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.iam_token"
resources:
- name: reviews
path: "/compare"
operations:
- name: compare
method: POST
- type: http
namespace: jira
baseUri: "https://gtigrows.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Manages API deprecation at GTI via consumer identification, notices, and tracking.
naftiko: "0.5"
info:
label: "API Deprecation Pipeline"
description: "Manages API deprecation at GTI via consumer identification, notices, and tracking."
tags:
- api-management
- communications
- governance
capability:
exposes:
- type: mcp
namespace: api-sunset
port: 8080
tools:
- name: notify-sunset
description: "Manage API sunset at GTI."
inputParameters:
- name: api
in: body
type: string
description: "API name."
- name: date
in: body
type: string
description: "Sunset date."
steps:
- name: consumers
type: call
call: "api-gw.consumers"
with:
api: "{{api}}"
- name: notify
type: call
call: "email.batch"
with:
to: "{{consumers.emails}}"
subject: "{{api}} sunset: {{date}}"
- name: track
type: call
call: "analytics.usage"
with:
api: "{{api}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "API"
summary: "Sunset {{api}} by {{date}}"
consumes:
- type: http
namespace: api-gw
baseUri: "https://api-gw.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.api_gw_token"
resources:
- name: consumers
path: "/apis/{{api}}/consumers"
inputParameters:
- name: api
in: path
operations:
- name: consumers
method: GET
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: usage
path: "/api-usage"
operations:
- name: usage
method: GET
- type: http
namespace: jira
baseUri: "https://gtigrows.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Checks ArgoCD sync at GTI.
naftiko: "0.5"
info:
label: "ArgoCD Sync Status"
description: "Checks ArgoCD sync at GTI."
tags:
- devops
- argocd
- gitops
capability:
exposes:
- type: mcp
namespace: argocd
port: 8080
tools:
- name: check-sync
description: "Check ArgoCD at GTI."
inputParameters:
- name: app
in: body
type: string
description: "App name."
call: "argocd.get-app"
with:
name: "{{app}}"
outputParameters:
- name: sync
type: string
mapping: "$.status.sync.status"
consumes:
- type: http
namespace: argocd
baseUri: "https://argocd.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.argocd_token"
resources:
- name: apps
path: "/applications/{{name}}"
inputParameters:
- name: name
in: path
operations:
- name: get-app
method: GET
Checks S3 bucket at GTI.
naftiko: "0.5"
info:
label: "S3 Bucket Stats"
description: "Checks S3 bucket at GTI."
tags:
- storage
- aws
- s3
capability:
exposes:
- type: mcp
namespace: s3-stats
port: 8080
tools:
- name: get-bucket
description: "Get bucket stats at GTI."
inputParameters:
- name: bucket
in: body
type: string
description: "Bucket."
call: "s3.get-stats"
with:
bucket: "{{bucket}}"
outputParameters:
- name: objects
type: number
mapping: "$.NumberOfObjects"
consumes:
- type: http
namespace: s3
baseUri: "https://s3.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_token"
resources:
- name: buckets
path: "/{{bucket}}?metrics"
inputParameters:
- name: bucket
in: path
operations:
- name: get-stats
method: GET
Checks build at GTI.
naftiko: "0.5"
info:
label: "Azure DevOps Build Check"
description: "Checks build at GTI."
tags:
- devops
- azure-devops
- ci-cd
capability:
exposes:
- type: mcp
namespace: azdo-build
port: 8080
tools:
- name: check-build
description: "Check build at GTI."
inputParameters:
- name: project
in: body
type: string
description: "Project."
- name: build_id
in: body
type: string
description: "Build ID."
call: "azdo.get-build"
with:
project: "{{project}}"
build_id: "{{build_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/gtigrows.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds/{{build_id}}"
inputParameters:
- name: project
in: path
- name: build_id
in: path
operations:
- name: get-build
method: GET
Checks Azure resource at GTI.
naftiko: "0.5"
info:
label: "Azure Resource Health"
description: "Checks Azure resource at GTI."
tags:
- cloud
- azure
- infrastructure
capability:
exposes:
- type: mcp
namespace: az-health
port: 8080
tools:
- name: check-resource
description: "Check resource at GTI."
inputParameters:
- name: resource_id
in: body
type: string
description: "Resource ID."
call: "azure.get-health"
with:
id: "{{resource_id}}"
outputParameters:
- name: state
type: string
mapping: "$.properties.availabilityState"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: health
path: "/{{id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current"
inputParameters:
- name: id
in: path
operations:
- name: get-health
method: GET
Verifies backups at GTI.
naftiko: "0.5"
info:
label: "Backup Verification Pipeline"
description: "Verifies backups at GTI."
tags:
- database
- backup
- operations
capability:
exposes:
- type: mcp
namespace: backup-verify
port: 8080
tools:
- name: verify-backups
description: "Verify backups at GTI."
inputParameters:
- name: db
in: body
type: string
description: "Database."
- name: date
in: body
type: string
description: "Backup date."
steps:
- name: status
type: call
call: "backup.get-status"
with:
db: "{{db}}"
date: "{{date}}"
- name: verify
type: call
call: "backup.verify"
with:
id: "{{status.backup_id}}"
- name: log
type: call
call: "snowflake.query"
with:
query: "INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#dba"
text: "Backup {{db}}: {{verify.status}}"
consumes:
- type: http
namespace: backup
baseUri: "https://backup.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.backup_token"
resources:
- name: backups
path: "/databases/{{db}}/status"
inputParameters:
- name: db
in: path
operations:
- name: get-status
method: GET
- type: http
namespace: snowflake
baseUri: "https://gtigrows.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Analyzes budget variance at GTI via Oracle, Workday, and Slack.
naftiko: "0.5"
info:
label: "Budget Variance Pipeline"
description: "Analyzes budget variance at GTI via Oracle, Workday, and Slack."
tags:
- finance
- budget
- oracle
- workday
capability:
exposes:
- type: mcp
namespace: budget-var
port: 8080
tools:
- name: analyze-variance
description: "Check budget variance at GTI."
inputParameters:
- name: cc
in: body
type: string
description: "Cost center."
- name: period
in: body
type: string
description: "Period."
steps:
- name: actuals
type: call
call: "oracle.get-actuals"
with:
cc: "{{cc}}"
period: "{{period}}"
- name: budget
type: call
call: "workday.get-budget"
with:
cc: "{{cc}}"
- name: compute
type: call
call: "analytics.variance"
with:
a: "{{actuals.total}}"
b: "{{budget.total}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#finance"
text: "Variance {{cc}}: ${{compute.variance}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: fin
path: "/actuals"
operations:
- name: get-actuals
method: GET
- type: http
namespace: workday
baseUri: "https://wd5.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: budgets
path: "/budgets"
operations:
- name: get-budget
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: var
path: "/compute"
operations:
- name: variance
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Plans capacity at GTI by collecting utilization and forecasting.
naftiko: "0.5"
info:
label: "Capacity Planning Pipeline"
description: "Plans capacity at GTI by collecting utilization and forecasting."
tags:
- infrastructure
- capacity-planning
- forecasting
capability:
exposes:
- type: mcp
namespace: capacity
port: 8080
tools:
- name: plan-capacity
description: "Plan capacity at GTI."
inputParameters:
- name: resource
in: body
type: string
description: "Resource type."
- name: months
in: body
type: number
description: "Forecast months."
steps:
- name: util
type: call
call: "monitoring.get-util"
with:
resource: "{{resource}}"
- name: forecast
type: call
call: "analytics.forecast"
with:
current: "{{util.pct}}"
months: "{{months}}"
- name: procure
type: call
call: "servicenow.create-request"
with:
type: "capacity"
resource: "{{resource}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "capacity"
consumes:
- type: http
namespace: monitoring
baseUri: "https://monitoring.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: util
path: "/resources/{{resource}}/util"
inputParameters:
- name: resource
in: path
operations:
- name: get-util
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: forecast
path: "/demand"
operations:
- name: forecast
method: POST
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Monitors cert expiry at GTI.
naftiko: "0.5"
info:
label: "Certificate Expiry Pipeline"
description: "Monitors cert expiry at GTI."
tags:
- security
- certificates
- monitoring
capability:
exposes:
- type: mcp
namespace: cert-monitor
port: 8080
tools:
- name: check-certs
description: "Monitor certs at GTI."
inputParameters:
- name: domains
in: body
type: string
description: "Domains to check."
steps:
- name: scan
type: call
call: "cert-scanner.scan"
with:
domains: "{{domains}}"
- name: filter
type: call
call: "analytics.filter-expiring"
with:
certs: "{{scan.results}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "{{filter.count}} certs expiring"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#security"
text: "Cert alert: {{filter.count}} expiring"
consumes:
- type: http
namespace: cert-scanner
baseUri: "https://certs.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.cert_token"
resources:
- name: scans
path: "/scan"
operations:
- name: scan
method: POST
- type: http
namespace: jira
baseUri: "https://gtigrows.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Routes changes at GTI through ServiceNow and CAB approval.
naftiko: "0.5"
info:
label: "Change Management Pipeline"
description: "Routes changes at GTI through ServiceNow and CAB approval."
tags:
- change-management
- servicenow
- itil
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: process-change
description: "Process changes at GTI."
inputParameters:
- name: change_id
in: body
type: string
description: "Change ID."
- name: date
in: body
type: string
description: "Date."
steps:
- name: get
type: call
call: "servicenow.get-change"
with:
id: "{{change_id}}"
- name: conflicts
type: call
call: "servicenow.check-conflicts"
with:
date: "{{date}}"
- name: submit
type: call
call: "servicenow.update"
with:
id: "{{change_id}}"
state: "approval"
- name: notify
type: call
call: "email.send"
with:
to: "cab@co.com"
subject: "CAB: {{change_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: changes
path: "/table/change_request/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-change
method: GET
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Optimizes cloud costs at GTI via Azure, FinOps, Jira, and Power BI.
naftiko: "0.5"
info:
label: "Cloud Cost Optimization Pipeline"
description: "Optimizes cloud costs at GTI via Azure, FinOps, Jira, and Power BI."
tags:
- cloud
- cost-management
- finops
capability:
exposes:
- type: mcp
namespace: cloud-opt
port: 8080
tools:
- name: optimize
description: "Optimize cloud costs at GTI."
inputParameters:
- name: provider
in: body
type: string
description: "Provider."
- name: range
in: body
type: string
description: "Range."
steps:
- name: spend
type: call
call: "cloud.get-costs"
with:
provider: "{{provider}}"
range: "{{range}}"
- name: savings
type: call
call: "finops.analyze"
with:
data: "{{spend.data}}"
- name: action
type: call
call: "jira.create-issue"
with:
project: "FINOPS"
summary: "Save ${{savings.potential}}"
- name: report
type: call
call: "power-bi.refresh"
with:
dataset: "cloud"
consumes:
- type: http
namespace: cloud
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: costs
path: "/providers/Microsoft.CostManagement/query"
operations:
- name: get-costs
method: POST
- type: http
namespace: finops
baseUri: "https://finops.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.finops_token"
resources:
- name: analysis
path: "/savings"
operations:
- name: analyze
method: POST
- type: http
namespace: jira
baseUri: "https://gtigrows.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Checks CloudWatch alarm at GTI.
naftiko: "0.5"
info:
label: "CloudWatch Alarm Check"
description: "Checks CloudWatch alarm at GTI."
tags:
- monitoring
- aws
- cloudwatch
capability:
exposes:
- type: mcp
namespace: cw-alarm
port: 8080
tools:
- name: check-alarm
description: "Check alarm at GTI."
inputParameters:
- name: alarm
in: body
type: string
description: "Alarm name."
call: "cw.describe-alarm"
with:
alarm: "{{alarm}}"
outputParameters:
- name: state
type: string
mapping: "$.MetricAlarms[0].StateValue"
consumes:
- type: http
namespace: cw
baseUri: "https://monitoring.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_token"
resources:
- name: alarms
path: "/"
operations:
- name: describe-alarm
method: GET
Searches Confluence at GTI.
naftiko: "0.5"
info:
label: "Confluence Article Search"
description: "Searches Confluence at GTI."
tags:
- knowledge-management
- confluence
- documentation
capability:
exposes:
- type: mcp
namespace: confluence-search
port: 8080
tools:
- name: search-articles
description: "Search Confluence at GTI."
inputParameters:
- name: query
in: body
type: string
description: "Query."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: title
type: string
mapping: "$.results[0].title"
consumes:
- type: http
namespace: confluence
baseUri: "https://gtigrows.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
operations:
- name: search
method: GET
Searches Green Thumb's Confluence for SOPs, compliance guides, and cultivation procedures by keyword.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Search"
description: "Searches Green Thumb's Confluence for SOPs, compliance guides, and cultivation procedures by keyword."
tags:
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: search-kb
description: "Search Confluence by keyword. Returns matching pages with titles and URLs."
inputParameters:
- name: query
in: body
type: string
description: "Search keyword."
call: "confluence.search"
with:
cql: "text~\"{{query}}\""
consumes:
- type: http
namespace: confluence
baseUri: "https://gti.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: search
path: "/search"
operations:
- name: search
method: GET
Tracks contract renewals at GTI via contracts system, email, Jira, and Salesforce.
naftiko: "0.5"
info:
label: "Contract Renewal Pipeline"
description: "Tracks contract renewals at GTI via contracts system, email, Jira, and Salesforce."
tags:
- procurement
- contracts
- salesforce
- jira
capability:
exposes:
- type: mcp
namespace: contract-renew
port: 8080
tools:
- name: track
description: "Track renewals at GTI."
inputParameters:
- name: contract_id
in: body
type: string
description: "Contract ID."
- name: owner
in: body
type: string
description: "Owner email."
steps:
- name: get
type: call
call: "contracts.get"
with:
id: "{{contract_id}}"
- name: remind
type: call
call: "email.send"
with:
to: "{{owner}}"
subject: "Renewal: {{contract_id}}"
- name: task
type: call
call: "jira.create-issue"
with:
project: "PROC"
summary: "Renew {{contract_id}}"
- name: crm
type: call
call: "salesforce.update"
with:
id: "{{contract_id}}"
stage: "Renewal"
consumes:
- type: http
namespace: contracts
baseUri: "https://contracts.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.contracts_token"
resources:
- name: contracts
path: "/contracts/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
- type: http
namespace: jira
baseUri: "https://gtigrows.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: salesforce
baseUri: "https://gtigrows.com.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opps
path: "/sobjects/Opportunity"
operations:
- name: update
method: PATCH
Checks Cosmos DB at GTI.
naftiko: "0.5"
info:
label: "Cosmos DB Metrics"
description: "Checks Cosmos DB at GTI."
tags:
- database
- azure
- cosmos-db
capability:
exposes:
- type: mcp
namespace: cosmos
port: 8080
tools:
- name: check-metrics
description: "Check Cosmos at GTI."
inputParameters:
- name: account
in: body
type: string
description: "Account."
call: "cosmos.metrics"
with:
account: "{{account}}"
outputParameters:
- name: ru_avg
type: number
mapping: "$.value[0].average"
consumes:
- type: http
namespace: cosmos
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: metrics
path: "/providers/Microsoft.DocumentDB/databaseAccounts/{{account}}/metrics"
inputParameters:
- name: account
in: path
operations:
- name: metrics
method: GET
Reallocates costs at GTI.
naftiko: "0.5"
info:
label: "Cost Reallocation Pipeline"
description: "Reallocates costs at GTI."
tags:
- finance
- cost-allocation
- oracle
capability:
exposes:
- type: mcp
namespace: cost-realloc
port: 8080
tools:
- name: reallocate
description: "Reallocate costs at GTI."
inputParameters:
- name: source
in: body
type: string
description: "Source CC."
- name: target
in: body
type: string
description: "Target CC."
- name: amount
in: body
type: number
description: "Amount."
steps:
- name: current
type: call
call: "oracle.get-alloc"
with:
cc: "{{source}}"
- name: compute
type: call
call: "analytics.realloc"
with:
source: "{{source}}"
target: "{{target}}"
amount: "{{amount}}"
- name: post
type: call
call: "oracle.post-journal"
with:
entries: "{{compute.entries}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#finance"
text: "Reallocated ${{amount}} from {{source}} to {{target}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: allocations
path: "/cost-centers/{{cc}}/allocations"
inputParameters:
- name: cc
in: path
operations:
- name: get-alloc
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: realloc
path: "/compute"
operations:
- name: realloc
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
When environmental sensors detect out-of-range conditions via Azure IoT, creates a ServiceNow incident, adjusts HVAC parameters, and alerts the cultivation team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cultivation Environment Monitoring Alert"
description: "When environmental sensors detect out-of-range conditions via Azure IoT, creates a ServiceNow incident, adjusts HVAC parameters, and alerts the cultivation team via Microsoft Teams."
tags:
- cultivation
- iot
- microsoft-azure
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: env-monitoring
port: 8080
tools:
- name: handle-environment-alert
description: "Given a facility code, zone, and alert type, create incident and notify the cultivation team."
inputParameters:
- name: facility_code
in: body
type: string
description: "The cultivation facility code."
- name: zone
in: body
type: string
description: "The grow room zone identifier."
- name: alert_type
in: body
type: string
description: "Type of environmental alert (e.g. temperature, humidity, CO2)."
- name: current_value
in: body
type: number
description: "The current sensor reading."
- name: threshold
in: body
type: number
description: "The expected threshold value."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Environment alert: {{alert_type}} in {{facility_code}} Zone {{zone}}"
priority: "2"
category: "cultivation"
description: "{{alert_type}} out of range in {{facility_code}} Zone {{zone}}. Current: {{current_value}}. Threshold: {{threshold}}."
- name: notify-cultivation
type: call
call: "msteams.post-channel-message"
with:
team_id: "cultivation"
channel_id: "environment-alerts"
text: "ENV ALERT: {{alert_type}} in {{facility_code}} Zone {{zone}}. Current: {{current_value}} (threshold: {{threshold}}). Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://gti.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a cultivation batch reaches harvest, logs harvest data in Oracle Cloud, creates a lab testing request in ServiceNow, documents in SharePoint, and notifies the cultivation and quality teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Cultivation Harvest Orchestrator"
description: "When a cultivation batch reaches harvest, logs harvest data in Oracle Cloud, creates a lab testing request in ServiceNow, documents in SharePoint, and notifies the cultivation and quality teams via Microsoft Teams."
tags:
- cultivation
- harvest
- oracle-cloud
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cultivation-harvest
port: 8080
tools:
- name: process-harvest
description: "Given a batch ID, harvest weight, and facility code, log the harvest, request lab testing, document, and notify teams."
inputParameters:
- name: batch_id
in: body
type: string
description: "The cultivation batch ID."
- name: harvest_weight_grams
in: body
type: number
description: "Total harvest weight in grams."
- name: facility_code
in: body
type: string
description: "The cultivation facility code."
- name: strain
in: body
type: string
description: "The cannabis strain name."
steps:
- name: log-harvest
type: call
call: "oracle-cloud.update-batch"
with:
batch_id: "{{batch_id}}"
status: "harvested"
weight: "{{harvest_weight_grams}}"
- name: request-lab-test
type: call
call: "servicenow.create-task"
with:
short_description: "Lab testing: Batch {{batch_id}} — {{strain}}"
assigned_group: "Quality_Lab"
description: "Batch {{batch_id}} ({{strain}}) harvested at {{facility_code}}. Weight: {{harvest_weight_grams}}g. Requires potency and contaminant testing."
- name: document-harvest
type: call
call: "sharepoint.create-file"
with:
site_id: "cultivation-records"
folder_path: "Harvests/{{facility_code}}/{{batch_id}}"
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
team_id: "cultivation"
channel_id: "harvests"
text: "Harvest complete: Batch {{batch_id}} ({{strain}}) at {{facility_code}}. Weight: {{harvest_weight_grams}}g. Lab testing requested: {{request-lab-test.number}}. Docs: {{document-harvest.url}}."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: batches
path: "/lotBatches/{{batch_id}}"
inputParameters:
- name: batch_id
in: path
operations:
- name: update-batch
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://gti.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a customer reaches a new loyalty tier, updates their profile in Salesforce, sends a congratulatory email via MailChimp, and notifies dispensary managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Customer Loyalty Tier Update"
description: "When a customer reaches a new loyalty tier, updates their profile in Salesforce, sends a congratulatory email via MailChimp, and notifies dispensary managers via Microsoft Teams."
tags:
- dispensary
- loyalty
- salesforce
- mailchimp
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: loyalty
port: 8080
tools:
- name: update-loyalty-tier
description: "Given a customer ID and new tier, update Salesforce, email the customer, and notify managers."
inputParameters:
- name: customer_id
in: body
type: string
description: "The Salesforce contact ID."
- name: new_tier
in: body
type: string
description: "The new loyalty tier."
- name: customer_email
in: body
type: string
description: "The customer email."
steps:
- name: update-salesforce
type: call
call: "salesforce.update-contact"
with:
contact_id: "{{customer_id}}"
loyalty_tier: "{{new_tier}}"
- name: send-email
type: call
call: "mailchimp.send-transactional"
with:
to_email: "{{customer_email}}"
template: "loyalty_upgrade"
merge_vars:
tier: "{{new_tier}}"
- name: notify-managers
type: call
call: "msteams.post-channel-message"
with:
team_id: "dispensary-ops"
channel_id: "loyalty"
text: "Customer {{customer_id}} upgraded to {{new_tier}} tier."
consumes:
- type: http
namespace: salesforce
baseUri: "https://gti.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: update-contact
method: PATCH
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: bearer
token: "$secrets.mailchimp_api_key"
resources:
- name: transactional
path: "/messages/send-template"
operations:
- name: send-transactional
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Monitors data pipelines at GTI via Databricks, Snowflake, Slack, and ServiceNow.
naftiko: "0.5"
info:
label: "Data Pipeline Monitor Pipeline"
description: "Monitors data pipelines at GTI via Databricks, Snowflake, Slack, and ServiceNow."
tags:
- data-engineering
- databricks
- monitoring
- slack
capability:
exposes:
- type: mcp
namespace: pipeline-mon
port: 8080
tools:
- name: monitor
description: "Monitor pipelines at GTI."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "Pipeline ID."
steps:
- name: status
type: call
call: "databricks.get-run"
with:
id: "{{pipeline_id}}"
- name: quality
type: call
call: "snowflake.query"
with:
query: "SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#data"
text: "Pipeline {{pipeline_id}}: {{status.state}}"
- name: incident
type: call
call: "servicenow.create-incident"
with:
desc: "Pipeline {{pipeline_id}} issue"
consumes:
- type: http
namespace: databricks
baseUri: "https://gtigrows.com.cloud.databricks.com/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/runs/get"
operations:
- name: get-run
method: GET
- type: http
namespace: snowflake
baseUri: "https://gtigrows.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Manages data retention at GTI.
naftiko: "0.5"
info:
label: "Data Retention Pipeline"
description: "Manages data retention at GTI."
tags:
- data-governance
- compliance
- retention
capability:
exposes:
- type: mcp
namespace: retention
port: 8080
tools:
- name: cleanup
description: "Manage retention at GTI."
inputParameters:
- name: policy
in: body
type: string
description: "Policy ID."
steps:
- name: find
type: call
call: "catalog.find-expired"
with:
policy: "{{policy}}"
- name: archive
type: call
call: "storage.archive"
with:
records: "{{find.ids}}"
- name: delete
type: call
call: "db.delete"
with:
ids: "{{find.ids}}"
- name: log
type: call
call: "snowflake.query"
with:
query: "INSERT INTO retention_log VALUES ('{{policy}}',{{find.count}})"
consumes:
- type: http
namespace: catalog
baseUri: "https://catalog.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.catalog_token"
resources:
- name: policies
path: "/expired"
operations:
- name: find-expired
method: GET
- type: http
namespace: storage
baseUri: "https://storage.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.storage_token"
resources:
- name: archives
path: "/archive"
operations:
- name: archive
method: POST
- type: http
namespace: db
baseUri: "https://db.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.db_token"
resources:
- name: records
path: "/delete"
operations:
- name: delete
method: POST
- type: http
namespace: snowflake
baseUri: "https://gtigrows.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
Checks Datadog monitor at GTI.
naftiko: "0.5"
info:
label: "Datadog Monitor Check"
description: "Checks Datadog monitor at GTI."
tags:
- monitoring
- datadog
- observability
capability:
exposes:
- type: mcp
namespace: dd-monitor
port: 8080
tools:
- name: check-monitor
description: "Check monitor at GTI."
inputParameters:
- name: monitor_id
in: body
type: string
description: "Monitor ID."
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: status
type: string
mapping: "$.overall_state"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
Triggers a dispensary compliance check by pulling the location profile from Oracle Cloud, querying open compliance tickets in ServiceNow, generating an audit report in SharePoint, and notifying the compliance team.
naftiko: "0.5"
info:
label: "Dispensary Compliance Audit Orchestrator"
description: "Triggers a dispensary compliance check by pulling the location profile from Oracle Cloud, querying open compliance tickets in ServiceNow, generating an audit report in SharePoint, and notifying the compliance team."
tags:
- compliance
- dispensary
- audit
- oracle-cloud
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: dispensary-compliance
port: 8080
tools:
- name: run-compliance-audit
description: "Given a dispensary location code and audit type, pull the profile, check tickets, generate report, and notify."
inputParameters:
- name: location_code
in: body
type: string
description: "The dispensary location code."
- name: audit_type
in: body
type: string
description: "Type of compliance audit (e.g. state-inspection, internal-review, safety)."
steps:
- name: get-location
type: call
call: "oracle-cloud.get-location"
with:
location_code: "{{location_code}}"
- name: get-open-tickets
type: call
call: "servicenow.query-tasks"
with:
query: "location={{location_code}}^category={{audit_type}}^stateNOT IN6,7"
- name: create-audit-report
type: call
call: "sharepoint.create-file"
with:
site_id: "compliance-audits"
folder_path: "Dispensary/{{location_code}}/{{audit_type}}"
content: "Location: {{get-location.name}}. Open issues: {{get-open-tickets.count}}. Audit: {{audit_type}}."
- name: notify-compliance
type: call
call: "msteams.post-channel-message"
with:
team_id: "compliance"
channel_id: "dispensary-audits"
text: "Compliance audit: {{get-location.name}} ({{location_code}}). Type: {{audit_type}}. Open issues: {{get-open-tickets.count}}. Report: {{create-audit-report.url}}."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: locations
path: "/locations/{{location_code}}"
inputParameters:
- name: location_code
in: path
operations:
- name: get-location
method: GET
- type: http
namespace: servicenow
baseUri: "https://gti.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: query-tasks
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries product inventory levels from Oracle Cloud for a given SKU across Green Thumb dispensary locations, returning on-hand quantity, reserved stock, and low-stock alerts.
naftiko: "0.5"
info:
label: "Dispensary Product Inventory Check"
description: "Queries product inventory levels from Oracle Cloud for a given SKU across Green Thumb dispensary locations, returning on-hand quantity, reserved stock, and low-stock alerts."
tags:
- dispensary
- inventory
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: dispensary-inventory
port: 8080
tools:
- name: check-product-inventory
description: "Given a product SKU and optional location, return current inventory quantity and availability."
inputParameters:
- name: sku
in: body
type: string
description: "The product SKU."
- name: location_code
in: body
type: string
description: "Optional dispensary location code."
call: "oracle-cloud.get-inventory"
with:
sku: "{{sku}}"
location_code: "{{location_code}}"
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: inventory
path: "/inventoryBalances?q=ItemNumber={{sku}};LocationCode={{location_code}}"
inputParameters:
- name: sku
in: query
- name: location_code
in: query
operations:
- name: get-inventory
method: GET
Checks container at GTI.
naftiko: "0.5"
info:
label: "Docker Container Check"
description: "Checks container at GTI."
tags:
- containers
- docker
- infrastructure
capability:
exposes:
- type: mcp
namespace: docker
port: 8080
tools:
- name: check-container
description: "Check container at GTI."
inputParameters:
- name: id
in: body
type: string
description: "Container ID."
call: "docker.get-container"
with:
id: "{{id}}"
outputParameters:
- name: status
type: string
mapping: "$.State.Status"
consumes:
- type: http
namespace: docker
baseUri: "https://docker.gtigrows.com/v1.41"
authentication:
type: bearer
token: "$secrets.docker_token"
resources:
- name: containers
path: "/containers/{{id}}/json"
inputParameters:
- name: id
in: path
operations:
- name: get-container
method: GET
Tests disaster recovery at GTI via failover, health checks, and reporting.
naftiko: "0.5"
info:
label: "DR Test Pipeline"
description: "Tests disaster recovery at GTI via failover, health checks, and reporting."
tags:
- disaster-recovery
- business-continuity
- testing
capability:
exposes:
- type: mcp
namespace: dr-test
port: 8080
tools:
- name: test-dr
description: "Test DR at GTI."
inputParameters:
- name: plan_id
in: body
type: string
description: "Plan ID."
- name: type
in: body
type: string
description: "Test type."
steps:
- name: failover
type: call
call: "dr.failover"
with:
plan: "{{plan_id}}"
type: "{{type}}"
- name: validate
type: call
call: "monitoring.check"
with:
scope: "critical"
- name: measure
type: call
call: "dr.metrics"
with:
id: "{{failover.id}}"
- name: report
type: call
call: "confluence.create-page"
with:
title: "DR - {{plan_id}}"
body: "RTO:{{measure.rto}}m RPO:{{measure.rpo}}m"
consumes:
- type: http
namespace: dr
baseUri: "https://dr.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.dr_token"
resources:
- name: failovers
path: "/failovers"
operations:
- name: failover
method: POST
- type: http
namespace: monitoring
baseUri: "https://monitoring.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: health
path: "/checks"
operations:
- name: check
method: POST
- type: http
namespace: confluence
baseUri: "https://gtigrows.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Detects infrastructure drift at GTI via Terraform, Slack, and Jira.
naftiko: "0.5"
info:
label: "Drift Detection Pipeline"
description: "Detects infrastructure drift at GTI via Terraform, Slack, and Jira."
tags:
- infrastructure
- terraform
- drift-detection
- devops
capability:
exposes:
- type: mcp
namespace: drift-det
port: 8080
tools:
- name: detect
description: "Detect drift at GTI."
inputParameters:
- name: ws_id
in: body
type: string
description: "Workspace ID."
- name: env
in: body
type: string
description: "Environment."
steps:
- name: plan
type: call
call: "terraform.run"
with:
ws: "{{ws_id}}"
- name: check
type: call
call: "terraform.get-plan"
with:
run: "{{plan.id}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#infra"
text: "Drift {{env}}: {{check.changes}} changes"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "INFRA"
summary: "Drift in {{env}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: run
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: jira
baseUri: "https://gtigrows.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Checks Dynatrace host at GTI.
naftiko: "0.5"
info:
label: "Dynatrace Host Status"
description: "Checks Dynatrace host at GTI."
tags:
- monitoring
- dynatrace
- infrastructure
capability:
exposes:
- type: mcp
namespace: dt
port: 8080
tools:
- name: check-host
description: "Check host at GTI."
inputParameters:
- name: host_id
in: body
type: string
description: "Host ID."
call: "dt.get-host"
with:
id: "{{host_id}}"
outputParameters:
- name: availability
type: string
mapping: "$.availabilityState"
consumes:
- type: http
namespace: dt
baseUri: "https://gtigrows.com.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: entities
path: "/entities/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-host
method: GET
Checks ES index at GTI.
naftiko: "0.5"
info:
label: "ES Index Health"
description: "Checks ES index at GTI."
tags:
- search
- elasticsearch
- infrastructure
capability:
exposes:
- type: mcp
namespace: es-health
port: 8080
tools:
- name: check-index
description: "Check ES index at GTI."
inputParameters:
- name: index
in: body
type: string
description: "Index name."
call: "es.get-health"
with:
index: "{{index}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: docs
type: number
mapping: "$.docs.count"
consumes:
- type: http
namespace: es
baseUri: "https://es.gtigrows.com:9200"
authentication:
type: bearer
token: "$secrets.es_token"
resources:
- name: indices
path: "/{{index}}/_stats"
inputParameters:
- name: index
in: path
operations:
- name: get-health
method: GET
Offboards employees at GTI via Okta, Slack, ServiceNow, and storage.
naftiko: "0.5"
info:
label: "Employee Offboarding Pipeline"
description: "Offboards employees at GTI via Okta, Slack, ServiceNow, and storage."
tags:
- hr
- offboarding
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: offboarding
port: 8080
tools:
- name: offboard
description: "Offboard employees at GTI."
inputParameters:
- name: emp_id
in: body
type: string
description: "Employee ID."
- name: last_day
in: body
type: string
description: "Last day."
steps:
- name: disable
type: call
call: "okta.deactivate"
with:
user: "{{emp_id}}"
- name: revoke
type: call
call: "slack.remove"
with:
user: "{{emp_id}}"
- name: return
type: call
call: "servicenow.create-request"
with:
type: "return"
emp: "{{emp_id}}"
- name: archive
type: call
call: "storage.archive"
with:
user: "{{emp_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://gtigrows.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{user}}/lifecycle/deactivate"
inputParameters:
- name: user
in: path
operations:
- name: deactivate
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: users
path: "/users.admin.remove"
operations:
- name: remove
method: POST
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: storage
baseUri: "https://storage.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.storage_token"
resources:
- name: archives
path: "/archive"
operations:
- name: archive
method: POST
On new hire in Workday, creates a ServiceNow onboarding ticket, provisions a SharePoint training folder, assigns compliance training via Pluralsight, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "On new hire in Workday, creates a ServiceNow onboarding ticket, provisions a SharePoint training folder, assigns compliance training via Pluralsight, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- pluralsight
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: onboard-employee
description: "Given a Workday worker ID and start date, create IT ticket, training folder, assign learning, and send welcome."
inputParameters:
- name: worker_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: "Department the new hire is joining."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: open-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
description: "Onboard {{get-employee.full_name}} starting {{start_date}} in {{department}}."
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr-onboarding"
folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
- name: assign-training
type: call
call: "pluralsight.assign-path"
with:
user_email: "{{get-employee.work_email}}"
path_id: "cannabis-compliance-101"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Green Thumb Industries, {{get-employee.first_name}}! IT ticket: {{open-ticket.number}}. Training: {{provision-folder.url}}. Compliance course: {{assign-training.path_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://gti.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: folders
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: pluralsight
baseUri: "https://api.pluralsight.com/api/v1"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: assignments
path: "/learning-paths/{{path_id}}/assignments"
inputParameters:
- name: path_id
in: path
operations:
- name: assign-path
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
Generates ESG reports at GTI.
naftiko: "0.5"
info:
label: "ESG Report Pipeline"
description: "Generates ESG reports at GTI."
tags:
- sustainability
- esg
- reporting
capability:
exposes:
- type: mcp
namespace: esg
port: 8080
tools:
- name: gen-report
description: "Generate ESG report at GTI."
inputParameters:
- name: year
in: body
type: string
description: "Year."
steps:
- name: data
type: call
call: "platform.get-environmental"
with:
year: "{{year}}"
- name: compute
type: call
call: "analytics.compute-esg"
with:
data: "{{data.metrics}}"
- name: generate
type: call
call: "docs.create-report"
with:
template: "esg"
- name: publish
type: call
call: "sharepoint.upload"
with:
path: "/ESG/{{year}}/report.pdf"
consumes:
- type: http
namespace: platform
baseUri: "https://data.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.data_token"
resources:
- name: environmental
path: "/metrics"
operations:
- name: get-environmental
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: esg
path: "/compute"
operations:
- name: compute-esg
method: POST
- type: http
namespace: docs
baseUri: "https://docs.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.docs_token"
resources:
- name: reports
path: "/create"
operations:
- name: create-report
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: files
path: "/sites/root/drive/root:/{{path}}:/content"
operations:
- name: upload
method: PUT
Audits expenses at GTI via Concur, compliance checks, and email.
naftiko: "0.5"
info:
label: "Expense Audit Pipeline"
description: "Audits expenses at GTI via Concur, compliance checks, and email."
tags:
- finance
- travel
- sap-concur
- compliance
capability:
exposes:
- type: mcp
namespace: expense-audit
port: 8080
tools:
- name: audit
description: "Audit expenses at GTI."
inputParameters:
- name: report_id
in: body
type: string
description: "Report ID."
steps:
- name: get
type: call
call: "concur.get-report"
with:
id: "{{report_id}}"
- name: check
type: call
call: "compliance.check"
with:
expenses: "{{get.entries}}"
- name: flag
type: call
call: "workflow.flag"
with:
id: "{{report_id}}"
violations: "{{check.violations}}"
- name: notify
type: call
call: "email.send"
with:
to: "{{get.approver}}"
subject: "Expense {{report_id}} violations"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-report
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: policies
path: "/check"
operations:
- name: check
method: POST
- type: http
namespace: workflow
baseUri: "https://workflow.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.workflow_token"
resources:
- name: reviews
path: "/flag"
operations:
- name: flag
method: POST
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Analyzes feedback at GTI via surveys, AI sentiment, and Power BI.
naftiko: "0.5"
info:
label: "Customer Feedback Pipeline"
description: "Analyzes feedback at GTI via surveys, AI sentiment, and Power BI."
tags:
- customer-experience
- analytics
- sentiment-analysis
capability:
exposes:
- type: mcp
namespace: feedback
port: 8080
tools:
- name: analyze
description: "Analyze feedback at GTI."
inputParameters:
- name: survey_id
in: body
type: string
description: "Survey ID."
steps:
- name: collect
type: call
call: "survey.get"
with:
id: "{{survey_id}}"
- name: sentiment
type: call
call: "ai.analyze"
with:
text: "{{collect.responses}}"
- name: themes
type: call
call: "ai.themes"
with:
data: "{{collect.responses}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "cx"
consumes:
- type: http
namespace: survey
baseUri: "https://surveys.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.survey_token"
resources:
- name: responses
path: "/surveys/{{id}}/responses"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: ai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: completions
path: "/chat/completions"
operations:
- name: analyze
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Checks GitHub repo at GTI.
naftiko: "0.5"
info:
label: "GitHub Repo Check"
description: "Checks GitHub repo at GTI."
tags:
- devops
- github
- version-control
capability:
exposes:
- type: mcp
namespace: gh-repo
port: 8080
tools:
- name: get-branch
description: "Check branch at GTI."
inputParameters:
- name: repo
in: body
type: string
description: "Repo."
- name: branch
in: body
type: string
description: "Branch."
call: "github.get-branch"
with:
repo: "{{repo}}"
branch: "{{branch}}"
outputParameters:
- name: sha
type: string
mapping: "$.commit.sha"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branches
path: "/repos/org/{{repo}}/branches/{{branch}}"
inputParameters:
- name: repo
in: path
- name: branch
in: path
operations:
- name: get-branch
method: GET
Pulls daily web traffic metrics from Google Analytics for GTI dispensary websites including sessions, page views, and conversion to online order.
naftiko: "0.5"
info:
label: "Google Analytics Dispensary Web Traffic"
description: "Pulls daily web traffic metrics from Google Analytics for GTI dispensary websites including sessions, page views, and conversion to online order."
tags:
- marketing
- analytics
- google-analytics
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-web-traffic
description: "Retrieve daily web traffic from Google Analytics for a date range."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "google-analytics.run-report"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
consumes:
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
Checks Google user at GTI.
naftiko: "0.5"
info:
label: "Google Workspace User Check"
description: "Checks Google user at GTI."
tags:
- identity
- google-workspace
- directory
capability:
exposes:
- type: mcp
namespace: gws
port: 8080
tools:
- name: check-user
description: "Check user at GTI."
inputParameters:
- name: email
in: body
type: string
description: "Email."
call: "google.get-user"
with:
email: "{{email}}"
outputParameters:
- name: suspended
type: boolean
mapping: "$.suspended"
consumes:
- type: http
namespace: google
baseUri: "https://admin.googleapis.com/admin/directory/v1"
authentication:
type: bearer
token: "$secrets.google_admin_token"
resources:
- name: users
path: "/users/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: get-user
method: GET
Checks Grafana dashboard at GTI.
naftiko: "0.5"
info:
label: "Grafana Dashboard Status"
description: "Checks Grafana dashboard at GTI."
tags:
- monitoring
- grafana
- dashboards
capability:
exposes:
- type: mcp
namespace: grafana
port: 8080
tools:
- name: check-dash
description: "Check dashboard at GTI."
inputParameters:
- name: uid
in: body
type: string
description: "Dashboard UID."
call: "grafana.get-dash"
with:
uid: "{{uid}}"
outputParameters:
- name: title
type: string
mapping: "$.dashboard.title"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.gtigrows.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{uid}}"
inputParameters:
- name: uid
in: path
operations:
- name: get-dash
method: GET
Auto-routes tickets at GTI.
naftiko: "0.5"
info:
label: "Helpdesk Auto-Routing Pipeline"
description: "Auto-routes tickets at GTI."
tags:
- support
- helpdesk
- ai
- automation
capability:
exposes:
- type: mcp
namespace: ticket-route
port: 8080
tools:
- name: route-ticket
description: "Auto-route tickets at GTI."
inputParameters:
- name: ticket_id
in: body
type: string
description: "Ticket ID."
steps:
- name: get
type: call
call: "helpdesk.get-ticket"
with:
id: "{{ticket_id}}"
- name: classify
type: call
call: "ai.classify"
with:
subject: "{{get.subject}}"
body: "{{get.body}}"
- name: assign
type: call
call: "helpdesk.assign"
with:
id: "{{ticket_id}}"
team: "{{classify.team}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#{{classify.team}}"
text: "New: {{get.subject}} ({{classify.priority}})"
consumes:
- type: http
namespace: helpdesk
baseUri: "https://helpdesk.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.helpdesk_token"
resources:
- name: tickets
path: "/tickets/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-ticket
method: GET
- type: http
namespace: ai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: completions
path: "/chat/completions"
operations:
- name: classify
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches Instagram account metrics for GTI dispensary brands including follower count, engagement rate, and recent post performance.
naftiko: "0.5"
info:
label: "Instagram Social Metrics"
description: "Fetches Instagram account metrics for GTI dispensary brands including follower count, engagement rate, and recent post performance."
tags:
- marketing
- social-media
- instagram
- meta
capability:
exposes:
- type: mcp
namespace: social-marketing
port: 8080
tools:
- name: get-instagram-metrics
description: "Retrieve Instagram account metrics. Returns followers, engagement, and recent post data."
inputParameters:
- name: account_id
in: body
type: string
description: "The Instagram business account ID."
call: "meta.get-ig-insights"
with:
account_id: "{{account_id}}"
consumes:
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_token"
resources:
- name: ig-insights
path: "/{{account_id}}/insights"
inputParameters:
- name: account_id
in: path
operations:
- name: get-ig-insights
method: GET
Escalates IT incidents at GTI via ServiceNow, PagerDuty, and Slack.
naftiko: "0.5"
info:
label: "IT Incident Escalation Pipeline"
description: "Escalates IT incidents at GTI via ServiceNow, PagerDuty, and Slack."
tags:
- incident-management
- servicenow
- pagerduty
- slack
capability:
exposes:
- type: mcp
namespace: incident-escalation
port: 8080
tools:
- name: escalate-incident
description: "Escalate incidents at GTI."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
- name: severity
in: body
type: string
description: "Severity."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_id: "{{incident_id}}"
- name: page
type: call
call: "pagerduty.create-incident"
with:
title: "{{get-incident.description}}"
urgency: "{{severity}}"
- name: channel
type: call
call: "slack.create-channel"
with:
name: "inc-{{incident_id}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#inc-{{incident_id}}"
text: "P{{severity}}: {{get-incident.description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: channels
path: "/conversations.create"
operations:
- name: create-channel
method: POST
Checks Jenkins at GTI.
naftiko: "0.5"
info:
label: "Jenkins Build Check"
description: "Checks Jenkins at GTI."
tags:
- devops
- jenkins
- ci-cd
capability:
exposes:
- type: mcp
namespace: jenkins
port: 8080
tools:
- name: check-build
description: "Check Jenkins at GTI."
inputParameters:
- name: job
in: body
type: string
description: "Job."
- name: build
in: body
type: string
description: "Build number."
call: "jenkins.get-build"
with:
job: "{{job}}"
build: "{{build}}"
outputParameters:
- name: result
type: string
mapping: "$.result"
consumes:
- type: http
namespace: jenkins
baseUri: "https://jenkins.gtigrows.com"
authentication:
type: bearer
token: "$secrets.jenkins_token"
resources:
- name: builds
path: "/job/{{job}}/{{build}}/api/json"
inputParameters:
- name: job
in: path
- name: build
in: path
operations:
- name: get-build
method: GET
Retrieves sprint progress at GTI.
naftiko: "0.5"
info:
label: "Jira Sprint Progress Lookup"
description: "Retrieves sprint progress at GTI."
tags:
- project-management
- jira
- agile
capability:
exposes:
- type: mcp
namespace: jira-sprint
port: 8080
tools:
- name: get-sprint
description: "Look up sprint at GTI."
inputParameters:
- name: project_key
in: body
type: string
description: "Project key."
call: "jira.get-sprints"
with:
project: "{{project_key}}"
outputParameters:
- name: name
type: string
mapping: "$.values[0].name"
- name: state
type: string
mapping: "$.values[0].state"
consumes:
- type: http
namespace: jira
baseUri: "https://gtigrows.com.atlassian.net/rest/agile/1.0"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: sprints
path: "/board/1/sprint"
operations:
- name: get-sprints
method: GET
Retrieves a Jira task by issue key, returning summary, status, assignee, and priority for project management tracking.
naftiko: "0.5"
info:
label: "Jira Task Status"
description: "Retrieves a Jira task by issue key, returning summary, status, assignee, and priority for project management tracking."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: projects
port: 8080
tools:
- name: get-task
description: "Look up a Jira issue by key."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://gti.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue/{{issue_key}}"
inputParameters:
- name: issue_key
in: path
operations:
- name: get-issue
method: GET
Maintains KB at GTI by finding stale articles and notifying owners.
naftiko: "0.5"
info:
label: "Knowledge Base Maintenance Pipeline"
description: "Maintains KB at GTI by finding stale articles and notifying owners."
tags:
- knowledge-management
- confluence
- maintenance
capability:
exposes:
- type: mcp
namespace: kb-maint
port: 8080
tools:
- name: maintain-kb
description: "Maintain KB at GTI."
inputParameters:
- name: space
in: body
type: string
description: "Confluence space."
- name: stale_days
in: body
type: number
description: "Days threshold."
steps:
- name: find
type: call
call: "confluence.search-stale"
with:
space: "{{space}}"
days: "{{stale_days}}"
- name: notify
type: call
call: "email.batch"
with:
to: "{{find.owners}}"
subject: "KB review needed"
- name: flag
type: call
call: "confluence.add-label"
with:
pages: "{{find.ids}}"
label: "needs-review"
- name: report
type: call
call: "slack.post-message"
with:
channel: "#kb"
text: "KB: {{find.count}} stale articles"
consumes:
- type: http
namespace: confluence
baseUri: "https://gtigrows.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
operations:
- name: search-stale
method: GET
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Checks Key Vault secret at GTI.
naftiko: "0.5"
info:
label: "Key Vault Secret Expiry"
description: "Checks Key Vault secret at GTI."
tags:
- security
- azure
- key-vault
capability:
exposes:
- type: mcp
namespace: akv
port: 8080
tools:
- name: check-expiry
description: "Check secret at GTI."
inputParameters:
- name: vault
in: body
type: string
description: "Vault."
- name: secret
in: body
type: string
description: "Secret."
call: "akv.get-secret"
with:
vault: "{{vault}}"
secret: "{{secret}}"
outputParameters:
- name: expires
type: string
mapping: "$.attributes.expires"
consumes:
- type: http
namespace: akv
baseUri: "https://{{vault}}.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: secrets
path: "/secrets/{{secret}}"
inputParameters:
- name: secret
in: path
operations:
- name: get-secret
method: GET
Generates KPI digest at GTI from Snowflake, Oracle, Power BI, and email.
naftiko: "0.5"
info:
label: "Weekly KPI Digest Pipeline"
description: "Generates KPI digest at GTI from Snowflake, Oracle, Power BI, and email."
tags:
- reporting
- kpi
- snowflake
- executive
capability:
exposes:
- type: mcp
namespace: kpi-digest
port: 8080
tools:
- name: gen-digest
description: "Generate KPI digest at GTI."
inputParameters:
- name: week
in: body
type: string
description: "Week ending."
- name: dist
in: body
type: string
description: "Distribution list."
steps:
- name: ops
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM kpis WHERE w='{{week}}'"
- name: fin
type: call
call: "oracle.get-summary"
with:
period: "{{week}}"
- name: refresh
type: call
call: "power-bi.refresh"
with:
dataset: "exec_kpis"
- name: send
type: call
call: "email.send"
with:
to: "{{dist}}"
subject: "KPIs - {{week}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://gtigrows.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: fin
path: "/summary"
operations:
- name: get-summary
method: GET
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Checks K8s pod health at GTI.
naftiko: "0.5"
info:
label: "K8s Pod Health"
description: "Checks K8s pod health at GTI."
tags:
- containers
- kubernetes
- infrastructure
capability:
exposes:
- type: mcp
namespace: k8s-pod
port: 8080
tools:
- name: check-pod
description: "Check pod at GTI."
inputParameters:
- name: namespace
in: body
type: string
description: "Namespace."
- name: pod
in: body
type: string
description: "Pod name."
call: "k8s.get-pod"
with:
namespace: "{{namespace}}"
pod: "{{pod}}"
outputParameters:
- name: phase
type: string
mapping: "$.status.phase"
consumes:
- type: http
namespace: k8s
baseUri: "https://k8s.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.k8s_token"
resources:
- name: pods
path: "/namespaces/{{namespace}}/pods/{{pod}}"
inputParameters:
- name: namespace
in: path
- name: pod
in: path
operations:
- name: get-pod
method: GET
When lab results arrive, updates the batch record in Oracle Cloud, creates a compliance log in SharePoint, updates the Salesforce product catalog if approved, and notifies quality and dispensary teams via Microsoft Teams.
naftiko: "0.5"
info:
label: "Lab Test Results Processing Pipeline"
description: "When lab results arrive, updates the batch record in Oracle Cloud, creates a compliance log in SharePoint, updates the Salesforce product catalog if approved, and notifies quality and dispensary teams via Microsoft Teams."
tags:
- quality
- lab-testing
- oracle-cloud
- sharepoint
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lab-results
port: 8080
tools:
- name: process-lab-results
description: "Given a batch ID and test results, update the batch, log compliance, update product catalog, and notify teams."
inputParameters:
- name: batch_id
in: body
type: string
description: "The cultivation batch ID."
- name: thc_pct
in: body
type: number
description: "THC percentage from lab results."
- name: cbd_pct
in: body
type: number
description: "CBD percentage from lab results."
- name: pass_fail
in: body
type: string
description: "Lab test result (pass/fail)."
- name: contaminants_clear
in: body
type: string
description: "Whether contaminant tests passed (true/false)."
steps:
- name: update-batch
type: call
call: "oracle-cloud.update-batch"
with:
batch_id: "{{batch_id}}"
thc_pct: "{{thc_pct}}"
cbd_pct: "{{cbd_pct}}"
test_result: "{{pass_fail}}"
- name: log-compliance
type: call
call: "sharepoint.create-file"
with:
site_id: "compliance-records"
folder_path: "LabResults/{{batch_id}}"
content: "Batch: {{batch_id}}. THC: {{thc_pct}}%. CBD: {{cbd_pct}}%. Contaminants clear: {{contaminants_clear}}. Result: {{pass_fail}}."
- name: update-catalog
type: call
call: "salesforce.update-product"
with:
batch_id: "{{batch_id}}"
thc_pct: "{{thc_pct}}"
cbd_pct: "{{cbd_pct}}"
available: "{{pass_fail}}"
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
team_id: "quality"
channel_id: "lab-results"
text: "Lab results: Batch {{batch_id}} — {{pass_fail}}. THC: {{thc_pct}}%. CBD: {{cbd_pct}}%. Contaminants: {{contaminants_clear}}. Catalog updated. Compliance logged: {{log-compliance.url}}."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: batches
path: "/lotBatches/{{batch_id}}"
inputParameters:
- name: batch_id
in: path
operations:
- name: update-batch
method: PATCH
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: salesforce
baseUri: "https://gti.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: products
path: "/sobjects/Product2"
operations:
- name: update-product
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks Lambda at GTI.
naftiko: "0.5"
info:
label: "Lambda Function Check"
description: "Checks Lambda at GTI."
tags:
- serverless
- aws
- lambda
capability:
exposes:
- type: mcp
namespace: lambda
port: 8080
tools:
- name: check-fn
description: "Check Lambda at GTI."
inputParameters:
- name: fn
in: body
type: string
description: "Function name."
call: "lambda.get-fn"
with:
name: "{{fn}}"
outputParameters:
- name: state
type: string
mapping: "$.Configuration.State"
consumes:
- type: http
namespace: lambda
baseUri: "https://lambda.us-east-1.amazonaws.com/2015-03-31"
authentication:
type: bearer
token: "$secrets.aws_token"
resources:
- name: functions
path: "/functions/{{name}}"
inputParameters:
- name: name
in: path
operations:
- name: get-fn
method: GET
Checks license compliance at GTI via scanning, entitlements, and procurement.
naftiko: "0.5"
info:
label: "License Compliance Pipeline"
description: "Checks license compliance at GTI via scanning, entitlements, and procurement."
tags:
- compliance
- licensing
- procurement
capability:
exposes:
- type: mcp
namespace: license-comp
port: 8080
tools:
- name: check-licenses
description: "Check license compliance at GTI."
inputParameters:
- name: software
in: body
type: string
description: "Software."
- name: vendor
in: body
type: string
description: "Vendor."
steps:
- name: scan
type: call
call: "assets.installations"
with:
sw: "{{software}}"
- name: entitlements
type: call
call: "licenses.get"
with:
sw: "{{software}}"
- name: flag
type: call
call: "compliance.flag"
with:
installed: "{{scan.count}}"
entitled: "{{entitlements.count}}"
- name: procure
type: call
call: "servicenow.create-request"
with:
type: "license"
sw: "{{software}}"
consumes:
- type: http
namespace: assets
baseUri: "https://assets.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.asset_token"
resources:
- name: installations
path: "/installations"
operations:
- name: installations
method: GET
- type: http
namespace: licenses
baseUri: "https://licenses.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.license_token"
resources:
- name: ent
path: "/entitlements"
operations:
- name: get
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: overages
path: "/flag"
operations:
- name: flag
method: POST
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Retrieves status of a LinkedIn job posting for Green Thumb Industries including views, applicants, and days remaining.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Status"
description: "Retrieves status of a LinkedIn job posting for Green Thumb Industries including views, applicants, and days remaining."
tags:
- recruiting
- linkedin
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: get-job-posting
description: "Look up a LinkedIn job posting by ID."
inputParameters:
- name: job_id
in: body
type: string
description: "The LinkedIn job posting ID."
call: "linkedin.get-job"
with:
job_id: "{{job_id}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: jobs
path: "/jobs/{{job_id}}"
inputParameters:
- name: job_id
in: path
operations:
- name: get-job
method: GET
Retrieves performance metrics for a MailChimp email campaign including open rate, click rate, and unsubscribes for dispensary marketing.
naftiko: "0.5"
info:
label: "MailChimp Email Campaign Metrics"
description: "Retrieves performance metrics for a MailChimp email campaign including open rate, click rate, and unsubscribes for dispensary marketing."
tags:
- marketing
- email
- mailchimp
capability:
exposes:
- type: mcp
namespace: email-marketing
port: 8080
tools:
- name: get-campaign-metrics
description: "Given a MailChimp campaign ID, return open rate, click rate, and total recipients."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The MailChimp campaign ID."
call: "mailchimp.get-report"
with:
campaign_id: "{{campaign_id}}"
consumes:
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: bearer
token: "$secrets.mailchimp_api_key"
resources:
- name: reports
path: "/reports/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-report
method: GET
Tracks marketing campaigns at GTI.
naftiko: "0.5"
info:
label: "Marketing Campaign Pipeline"
description: "Tracks marketing campaigns at GTI."
tags:
- marketing
- google-ads
- analytics
capability:
exposes:
- type: mcp
namespace: marketing
port: 8080
tools:
- name: track-campaign
description: "Track campaigns at GTI."
inputParameters:
- name: campaign
in: body
type: string
description: "Campaign ID."
steps:
- name: ads
type: call
call: "google-ads.get"
with:
id: "{{campaign}}"
- name: social
type: call
call: "social.get-metrics"
with:
campaign: "{{campaign}}"
- name: compile
type: call
call: "analytics.compile"
with:
ads: "{{ads.data}}"
social: "{{social.data}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "marketing"
consumes:
- type: http
namespace: google-ads
baseUri: "https://googleads.googleapis.com/v14"
authentication:
type: bearer
token: "$secrets.google_ads_token"
resources:
- name: campaigns
path: "/campaigns/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: social
baseUri: "https://social.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.social_token"
resources:
- name: metrics
path: "/campaigns/{{campaign}}"
inputParameters:
- name: campaign
in: path
operations:
- name: get-metrics
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: marketing
path: "/compile"
operations:
- name: compile
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Sends a notification message to a Microsoft Teams channel for operational alerts, compliance updates, or cultivation notifications.
naftiko: "0.5"
info:
label: "Microsoft Teams Notification"
description: "Sends a notification message to a Microsoft Teams channel for operational alerts, compliance updates, or cultivation notifications."
tags:
- communications
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: notifications
port: 8080
tools:
- name: send-alert
description: "Post a message 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.post-channel-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: post-channel-message
method: POST
Checks MongoDB at GTI.
naftiko: "0.5"
info:
label: "MongoDB Stats Check"
description: "Checks MongoDB at GTI."
tags:
- database
- mongodb
- operations
capability:
exposes:
- type: mcp
namespace: mongo
port: 8080
tools:
- name: get-stats
description: "Check MongoDB at GTI."
inputParameters:
- name: db
in: body
type: string
description: "Database."
- name: collection
in: body
type: string
description: "Collection."
call: "mongo.get-stats"
with:
db: "{{db}}"
collection: "{{collection}}"
outputParameters:
- name: count
type: number
mapping: "$.count"
consumes:
- type: http
namespace: mongo
baseUri: "https://mongo.gtigrows.com/api/atlas/v1.0"
authentication:
type: bearer
token: "$secrets.mongo_token"
resources:
- name: collections
path: "/collStats"
operations:
- name: get-stats
method: GET
Generates monthly security reports at GTI from Splunk and Qualys.
naftiko: "0.5"
info:
label: "Monthly Security Report Pipeline"
description: "Generates monthly security reports at GTI from Splunk and Qualys."
tags:
- security
- reporting
- splunk
- compliance
capability:
exposes:
- type: mcp
namespace: sec-report
port: 8080
tools:
- name: gen-sec-report
description: "Generate security report at GTI."
inputParameters:
- name: month
in: body
type: string
description: "Month."
steps:
- name: splunk
type: call
call: "splunk.search"
with:
query: "index=security earliest=-30d"
- name: scans
type: call
call: "qualys.results"
with:
month: "{{month}}"
- name: compile
type: call
call: "analytics.compile-security"
with:
events: "{{splunk.count}}"
vulns: "{{scans.critical}}"
- name: send
type: call
call: "email.send"
with:
to: "ciso@co.com"
subject: "Security - {{month}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.gtigrows.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/v2"
authentication:
type: bearer
token: "$secrets.qualys_token"
resources:
- name: results
path: "/fo/scan/results"
operations:
- name: results
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: security
path: "/compile"
operations:
- name: compile-security
method: POST
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Coordinates a new dispensary location launch by verifying inventory in Oracle Cloud, scheduling a marketing email in MailChimp, posting on Instagram via Meta, creating a compliance checklist in ServiceNow, and notifying cross-functional teams in Microsoft Teams.
naftiko: "0.5"
info:
label: "New Dispensary Opening Orchestrator"
description: "Coordinates a new dispensary location launch by verifying inventory in Oracle Cloud, scheduling a marketing email in MailChimp, posting on Instagram via Meta, creating a compliance checklist in ServiceNow, and notifying cross-functional teams in Microsoft Teams."
tags:
- dispensary
- launch
- oracle-cloud
- mailchimp
- meta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: dispensary-launch
port: 8080
tools:
- name: launch-dispensary
description: "Given a location code and launch date, verify inventory, schedule email, post social, create compliance task, and notify teams."
inputParameters:
- name: location_code
in: body
type: string
description: "The new dispensary location code."
- name: launch_date
in: body
type: string
description: "Launch date in YYYY-MM-DD format."
- name: location_name
in: body
type: string
description: "The dispensary location name."
steps:
- name: verify-inventory
type: call
call: "oracle-cloud.get-location-inventory"
with:
location_code: "{{location_code}}"
- name: schedule-email
type: call
call: "mailchimp.schedule-campaign"
with:
subject: "Grand Opening: {{location_name}} — Visit Us {{launch_date}}!"
schedule_time: "{{launch_date}}T09:00:00Z"
- name: post-social
type: call
call: "meta.create-post"
with:
message: "We're thrilled to announce our new {{location_name}} location opening {{launch_date}}! Come visit us."
- name: create-compliance-task
type: call
call: "servicenow.create-task"
with:
short_description: "New dispensary compliance: {{location_name}}"
assigned_group: "Compliance_Operations"
description: "Verify all state and local compliance requirements for {{location_name}} ({{location_code}}) opening {{launch_date}}."
- name: notify-teams
type: call
call: "msteams.post-channel-message"
with:
team_id: "operations"
channel_id: "dispensary-launches"
text: "Dispensary launch: {{location_name}} ({{location_code}}) on {{launch_date}}. Inventory: {{verify-inventory.total_skus}} SKUs ready. Email scheduled. Social posted. Compliance task: {{create-compliance-task.number}}."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: location-inventory
path: "/inventoryBalances?q=LocationCode={{location_code}}"
inputParameters:
- name: location_code
in: query
operations:
- name: get-location-inventory
method: GET
- type: http
namespace: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: bearer
token: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: schedule-campaign
method: POST
- type: http
namespace: meta
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.meta_token"
resources:
- name: posts
path: "/{{page_id}}/feed"
inputParameters:
- name: page_id
in: path
operations:
- name: create-post
method: POST
- type: http
namespace: servicenow
baseUri: "https://gti.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Onboards employees at GTI with Okta, ServiceNow, Slack, and calendar.
naftiko: "0.5"
info:
label: "New Employee IT Onboarding Pipeline"
description: "Onboards employees at GTI with Okta, ServiceNow, Slack, and calendar."
tags:
- hr
- onboarding
- okta
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: it-onboarding
port: 8080
tools:
- name: onboard-employee
description: "Onboard employees at GTI."
inputParameters:
- name: name
in: body
type: string
description: "Name."
- name: dept
in: body
type: string
description: "Department."
- name: start
in: body
type: string
description: "Start date."
steps:
- name: okta
type: call
call: "okta.create-user"
with:
name: "{{name}}"
department: "{{dept}}"
- name: equip
type: call
call: "servicenow.create-request"
with:
type: "new_hire"
for: "{{name}}"
- name: slack
type: call
call: "slack.invite"
with:
email: "{{okta.email}}"
- name: orient
type: call
call: "calendar.create-event"
with:
title: "Orientation - {{name}}"
date: "{{start}}"
consumes:
- type: http
namespace: okta
baseUri: "https://gtigrows.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: users
path: "/users.admin.invite"
operations:
- name: invite
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/hr/events"
operations:
- name: create-event
method: POST
Checks New Relic APM at GTI.
naftiko: "0.5"
info:
label: "New Relic APM Check"
description: "Checks New Relic APM at GTI."
tags:
- monitoring
- new-relic
- apm
capability:
exposes:
- type: mcp
namespace: nr-apm
port: 8080
tools:
- name: check-apm
description: "Check APM at GTI."
inputParameters:
- name: app_id
in: body
type: string
description: "App ID."
call: "newrelic.get-app"
with:
app_id: "{{app_id}}"
outputParameters:
- name: health
type: string
mapping: "$.application.health_status"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: bearer
token: "$secrets.new_relic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app
method: GET
Checks NR synthetics at GTI.
naftiko: "0.5"
info:
label: "New Relic Synthetics Monitor"
description: "Checks NR synthetics at GTI."
tags:
- monitoring
- new-relic
- synthetics
capability:
exposes:
- type: mcp
namespace: nr-synth
port: 8080
tools:
- name: check-monitor
description: "Check synthetics at GTI."
inputParameters:
- name: monitor_id
in: body
type: string
description: "Monitor ID."
call: "nr.get-monitor"
with:
id: "{{monitor_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: nr
baseUri: "https://synthetics.newrelic.com/synthetics/api/v3"
authentication:
type: bearer
token: "$secrets.new_relic_api_key"
resources:
- name: monitors
path: "/monitors/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-monitor
method: GET
Checks Okta user at GTI.
naftiko: "0.5"
info:
label: "Okta User Check"
description: "Checks Okta user at GTI."
tags:
- identity
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: okta-user
port: 8080
tools:
- name: check-user
description: "Check user at GTI."
inputParameters:
- name: email
in: body
type: string
description: "Email."
call: "okta.get-user"
with:
email: "{{email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: okta
baseUri: "https://gtigrows.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: get-user
method: GET
Retrieves a purchase order from Oracle E-Business Suite by PO number, returning vendor, total value, line items, and delivery status.
naftiko: "0.5"
info:
label: "Oracle E-Business Suite Purchase Order"
description: "Retrieves a purchase order from Oracle E-Business Suite by PO number, returning vendor, total value, line items, and delivery status."
tags:
- procurement
- oracle-e-business-suite
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-purchase-order
description: "Look up a purchase order by PO number."
inputParameters:
- name: po_number
in: body
type: string
description: "The Oracle purchase order number."
call: "oracle-ebs.get-po"
with:
po_number: "{{po_number}}"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://gti-ebs.oraclecloud.com/webservices/rest/po/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: purchase-orders
path: "/purchaseOrders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Checks on-call at GTI.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Check"
description: "Checks on-call at GTI."
tags:
- incident-management
- pagerduty
- on-call
capability:
exposes:
- type: mcp
namespace: pd-oncall
port: 8080
tools:
- name: get-oncall
description: "Check on-call at GTI."
inputParameters:
- name: schedule_id
in: body
type: string
description: "Schedule ID."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: user
type: string
mapping: "$.oncalls[0].user.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Creates postmortems at GTI.
naftiko: "0.5"
info:
label: "Incident Postmortem Pipeline"
description: "Creates postmortems at GTI."
tags:
- incident-management
- postmortem
- pagerduty
- confluence
capability:
exposes:
- type: mcp
namespace: postmortem
port: 8080
tools:
- name: create-postmortem
description: "Create postmortem at GTI."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
steps:
- name: timeline
type: call
call: "pagerduty.get-log"
with:
id: "{{incident_id}}"
- name: metrics
type: call
call: "datadog.get-metrics"
with:
incident: "{{incident_id}}"
- name: doc
type: call
call: "confluence.create-page"
with:
title: "Postmortem: {{timeline.title}}"
body: "Impact: {{metrics.impact}}"
- name: review
type: call
call: "calendar.create-event"
with:
title: "Review: {{timeline.title}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{id}}/log_entries"
inputParameters:
- name: id
in: path
operations:
- name: get-log
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: incidents
path: "/incidents"
operations:
- name: get-metrics
method: GET
- type: http
namespace: confluence
baseUri: "https://gtigrows.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/sre/events"
operations:
- name: create-event
method: POST
Triggers a Power BI dataset refresh for dispensary sales, cultivation, or compliance dashboards.
naftiko: "0.5"
info:
label: "Power BI Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for dispensary sales, cultivation, or compliance dashboards."
tags:
- analytics
- reporting
- power-bi
capability:
exposes:
- type: mcp
namespace: bi-reporting
port: 8080
tools:
- name: refresh-dashboard
description: "Trigger a Power BI dataset refresh by dataset ID."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
call: "powerbi.refresh-dataset"
with:
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: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Checks Power BI refresh at GTI.
naftiko: "0.5"
info:
label: "Power BI Refresh Check"
description: "Checks Power BI refresh at GTI."
tags:
- analytics
- power-bi
- dashboards
capability:
exposes:
- type: mcp
namespace: pbi-refresh
port: 8080
tools:
- name: check-refresh
description: "Check refresh at GTI."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Dataset ID."
call: "power-bi.get-refresh"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
consumes:
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh
method: GET
When a product recall is initiated, identifies affected batches in Oracle Cloud, flags affected dispensary inventory, creates compliance cases in ServiceNow, sends customer notifications via MailChimp, and alerts all locations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Product Recall Orchestrator"
description: "When a product recall is initiated, identifies affected batches in Oracle Cloud, flags affected dispensary inventory, creates compliance cases in ServiceNow, sends customer notifications via MailChimp, and alerts all locations via Microsoft Teams."
tags:
- compliance
- recall
- oracle-cloud
- servicenow
- mailchimp
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: product-recall
port: 8080
tools:
- name: initiate-recall
description: "Given batch IDs and reason, flag inventory, create compliance cases, notify customers, and alert all locations."
inputParameters:
- name: batch_ids
in: body
type: string
description: "Comma-separated batch IDs to recall."
- name: recall_reason
in: body
type: string
description: "Reason for the product recall."
- name: severity
in: body
type: string
description: "Recall severity (Class I, II, III)."
steps:
- name: flag-inventory
type: call
call: "oracle-cloud.quarantine-batches"
with:
batch_ids: "{{batch_ids}}"
reason: "{{recall_reason}}"
- name: create-compliance-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Product Recall ({{severity}}): {{recall_reason}}"
priority: "1"
category: "product_recall"
assigned_group: "Compliance_Urgent"
description: "Recall severity: {{severity}}. Reason: {{recall_reason}}. Batches: {{batch_ids}}. Affected locations: {{flag-inventory.affected_locations}}."
- name: notify-customers
type: call
call: "mailchimp.send-campaign"
with:
subject: "Important Product Notice from Green Thumb Industries"
segment: "recent-purchasers"
- name: alert-locations
type: call
call: "msteams.post-channel-message"
with:
team_id: "all-dispensaries"
channel_id: "urgent-notices"
text: "PRODUCT RECALL ({{severity}}): {{recall_reason}}. Batches: {{batch_ids}}. Remove from shelves immediately. Compliance case: {{create-compliance-case.number}}."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: quarantine
path: "/lotBatches/quarantine"
operations:
- name: quarantine-batches
method: POST
- type: http
namespace: servicenow
baseUri: "https://gti.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: mailchimp
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: bearer
token: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns"
operations:
- name: send-campaign
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Queries Prometheus metrics at GTI.
naftiko: "0.5"
info:
label: "Prometheus Metrics Query"
description: "Queries Prometheus metrics at GTI."
tags:
- monitoring
- prometheus
- metrics
capability:
exposes:
- type: mcp
namespace: prom
port: 8080
tools:
- name: query
description: "Query Prometheus at GTI."
inputParameters:
- name: query
in: body
type: string
description: "PromQL query."
call: "prometheus.query"
with:
query: "{{query}}"
outputParameters:
- name: value
type: number
mapping: "$.data.result[0].value[1]"
consumes:
- type: http
namespace: prometheus
baseUri: "https://prometheus.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.prometheus_token"
resources:
- name: queries
path: "/query"
operations:
- name: query
method: GET
Generates compliance reports at GTI from Snowflake, Power BI, and email.
naftiko: "0.5"
info:
label: "Quarterly Compliance Report Pipeline"
description: "Generates compliance reports at GTI from Snowflake, Power BI, and email."
tags:
- compliance
- reporting
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: compliance-rpt
port: 8080
tools:
- name: gen-report
description: "Generate compliance reports at GTI."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter."
- name: type
in: body
type: string
description: "Type."
steps:
- name: data
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM compliance WHERE q='{{quarter}}'"
- name: metrics
type: call
call: "analytics.compute"
with:
data: "{{data.results}}"
- name: refresh
type: call
call: "power-bi.refresh"
with:
dataset: "compliance"
- name: send
type: call
call: "email.send"
with:
to: "compliance@co.com"
subject: "{{type}} - {{quarter}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://gtigrows.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: metrics
path: "/compute"
operations:
- name: compute
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Checks RabbitMQ at GTI.
naftiko: "0.5"
info:
label: "RabbitMQ Queue Check"
description: "Checks RabbitMQ at GTI."
tags:
- messaging
- rabbitmq
- infrastructure
capability:
exposes:
- type: mcp
namespace: rmq
port: 8080
tools:
- name: check-queue
description: "Check queue at GTI."
inputParameters:
- name: vhost
in: body
type: string
description: "Vhost."
- name: queue
in: body
type: string
description: "Queue."
call: "rmq.get-queue"
with:
vhost: "{{vhost}}"
queue: "{{queue}}"
outputParameters:
- name: messages
type: number
mapping: "$.messages"
consumes:
- type: http
namespace: rmq
baseUri: "https://rmq.gtigrows.com:15672/api"
authentication:
type: bearer
token: "$secrets.rmq_token"
resources:
- name: queues
path: "/queues/{{vhost}}/{{queue}}"
inputParameters:
- name: vhost
in: path
- name: queue
in: path
operations:
- name: get-queue
method: GET
Checks RDS at GTI.
naftiko: "0.5"
info:
label: "RDS Instance Check"
description: "Checks RDS at GTI."
tags:
- database
- aws
- rds
capability:
exposes:
- type: mcp
namespace: rds
port: 8080
tools:
- name: check-db
description: "Check RDS at GTI."
inputParameters:
- name: instance
in: body
type: string
description: "Instance ID."
call: "rds.describe"
with:
id: "{{instance}}"
outputParameters:
- name: status
type: string
mapping: "$.DBInstances[0].DBInstanceStatus"
consumes:
- type: http
namespace: rds
baseUri: "https://rds.us-east-1.amazonaws.com"
authentication:
type: bearer
token: "$secrets.aws_token"
resources:
- name: instances
path: "/"
operations:
- name: describe
method: GET
Checks Redis at GTI.
naftiko: "0.5"
info:
label: "Redis Cache Status"
description: "Checks Redis at GTI."
tags:
- caching
- redis
- infrastructure
capability:
exposes:
- type: mcp
namespace: redis
port: 8080
tools:
- name: check-cache
description: "Check Redis at GTI."
inputParameters:
- name: instance
in: body
type: string
description: "Instance ID."
call: "redis.get-info"
with:
instance: "{{instance}}"
outputParameters:
- name: memory
type: string
mapping: "$.used_memory_human"
consumes:
- type: http
namespace: redis
baseUri: "https://redis.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.redis_token"
resources:
- name: instances
path: "/instances/{{instance}}/info"
inputParameters:
- name: instance
in: path
operations:
- name: get-info
method: GET
Checks release readiness at GTI.
naftiko: "0.5"
info:
label: "Release Readiness Pipeline"
description: "Checks release readiness at GTI."
tags:
- release-management
- devops
- quality
capability:
exposes:
- type: mcp
namespace: release-ready
port: 8080
tools:
- name: check-release
description: "Check release at GTI."
inputParameters:
- name: release_id
in: body
type: string
description: "Release ID."
- name: project
in: body
type: string
description: "Project."
steps:
- name: tests
type: call
call: "azdo.get-tests"
with:
project: "{{project}}"
release: "{{release_id}}"
- name: quality
type: call
call: "sonarqube.get-gate"
with:
project: "{{project}}"
- name: security
type: call
call: "security.get-scan"
with:
project: "{{project}}"
- name: doc
type: call
call: "confluence.create-page"
with:
title: "Release - {{release_id}}"
body: "Tests: {{tests.pass_rate}}% Quality: {{quality.status}}"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/gtigrows.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: tests
path: "/{{project}}/_apis/test/runs"
inputParameters:
- name: project
in: path
operations:
- name: get-tests
method: GET
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.gtigrows.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality
path: "/qualitygates/project_status"
operations:
- name: get-gate
method: GET
- type: http
namespace: security
baseUri: "https://security.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
resources:
- name: scans
path: "/results"
operations:
- name: get-scan
method: GET
- type: http
namespace: confluence
baseUri: "https://gtigrows.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves a customer profile from Salesforce by email, returning name, loyalty tier, purchase history summary, and preferred dispensary location.
naftiko: "0.5"
info:
label: "Salesforce Customer Lookup"
description: "Retrieves a customer profile from Salesforce by email, returning name, loyalty tier, purchase history summary, and preferred dispensary location."
tags:
- dispensary
- crm
- salesforce
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-customer
description: "Look up a customer in Salesforce by email. Returns name, loyalty tier, and preferred location."
inputParameters:
- name: email
in: body
type: string
description: "The customer email address."
call: "salesforce.get-contact"
with:
email: "{{email}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://gti.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/query?q=SELECT+Id,Name,Loyalty_Tier__c,Preferred_Location__c+FROM+Contact+WHERE+Email='{{email}}'"
inputParameters:
- name: email
in: query
operations:
- name: get-contact
method: GET
Checks SAP PO at GTI.
naftiko: "0.5"
info:
label: "SAP PO Check"
description: "Checks SAP PO at GTI."
tags:
- procurement
- sap
- purchase-orders
capability:
exposes:
- type: mcp
namespace: sap-po
port: 8080
tools:
- name: get-po
description: "Check PO at GTI."
inputParameters:
- name: po_number
in: body
type: string
description: "PO number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: vendor
type: string
mapping: "$.order.vendor"
- name: status
type: string
mapping: "$.order.status"
consumes:
- type: http
namespace: sap
baseUri: "https://sap.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: purchase-orders
path: "/purchase-orders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Manages security training at GTI.
naftiko: "0.5"
info:
label: "Security Training Pipeline"
description: "Manages security training at GTI."
tags:
- security
- training
- compliance
capability:
exposes:
- type: mcp
namespace: sec-training
port: 8080
tools:
- name: manage-training
description: "Manage training at GTI."
inputParameters:
- name: campaign
in: body
type: string
description: "Campaign ID."
steps:
- name: untrained
type: call
call: "lms.get-incomplete"
with:
campaign: "{{campaign}}"
- name: remind
type: call
call: "email.batch"
with:
to: "{{untrained.emails}}"
subject: "Training due"
- name: track
type: call
call: "lms.get-completion"
with:
campaign: "{{campaign}}"
- name: report
type: call
call: "power-bi.refresh"
with:
dataset: "training"
consumes:
- type: http
namespace: lms
baseUri: "https://lms.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.lms_token"
resources:
- name: campaigns
path: "/campaigns/{{campaign}}/incomplete"
inputParameters:
- name: campaign
in: path
operations:
- name: get-incomplete
method: GET
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Remediates vulnerabilities at GTI via scanning, Jira, and Slack.
naftiko: "0.5"
info:
label: "Security Vulnerability Remediation Pipeline"
description: "Remediates vulnerabilities at GTI via scanning, Jira, and Slack."
tags:
- security
- vulnerability-management
- jira
capability:
exposes:
- type: mcp
namespace: vuln-fix
port: 8080
tools:
- name: remediate
description: "Fix vulnerabilities at GTI."
inputParameters:
- name: target
in: body
type: string
description: "Target."
- name: policy
in: body
type: string
description: "Policy."
steps:
- name: scan
type: call
call: "qualys.scan"
with:
target: "{{target}}"
policy: "{{policy}}"
- name: prioritize
type: call
call: "security.prioritize"
with:
scan: "{{scan.id}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Vulns: {{prioritize.critical}} critical"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#security"
text: "Scan: {{prioritize.critical}} critical"
consumes:
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/v2"
authentication:
type: bearer
token: "$secrets.qualys_token"
resources:
- name: scans
path: "/fo/scan"
operations:
- name: scan
method: POST
- type: http
namespace: security
baseUri: "https://security.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
resources:
- name: vulns
path: "/prioritize"
operations:
- name: prioritize
method: POST
- type: http
namespace: jira
baseUri: "https://gtigrows.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Tracks a cannabis batch from cultivation through sale by querying batch data from Oracle Cloud, verifying state compliance records, logging the audit trail in SharePoint, and notifying the compliance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Seed-to-Sale Compliance Tracking Orchestrator"
description: "Tracks a cannabis batch from cultivation through sale by querying batch data from Oracle Cloud, verifying state compliance records, logging the audit trail in SharePoint, and notifying the compliance team via Microsoft Teams."
tags:
- compliance
- cultivation
- seed-to-sale
- oracle-cloud
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: seed-to-sale
port: 8080
tools:
- name: track-batch-compliance
description: "Given a batch ID and state, retrieve batch data, verify compliance, log audit trail, and notify the team."
inputParameters:
- name: batch_id
in: body
type: string
description: "The cultivation batch identifier."
- name: state_code
in: body
type: string
description: "The state jurisdiction code."
steps:
- name: get-batch
type: call
call: "oracle-cloud.get-batch"
with:
batch_id: "{{batch_id}}"
- name: log-audit
type: call
call: "sharepoint.create-file"
with:
site_id: "compliance-audit"
folder_path: "SeedToSale/{{state_code}}/{{batch_id}}"
content: "Batch: {{batch_id}}. State: {{state_code}}. Strain: {{get-batch.strain}}. Weight: {{get-batch.weight}}g. Status: {{get-batch.compliance_status}}. Harvest date: {{get-batch.harvest_date}}."
- name: notify-compliance
type: call
call: "msteams.post-channel-message"
with:
team_id: "compliance"
channel_id: "seed-to-sale"
text: "Batch {{batch_id}} ({{state_code}}): {{get-batch.strain}}, {{get-batch.weight}}g. Compliance: {{get-batch.compliance_status}}. Audit: {{log-audit.url}}."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: batches
path: "/lotBatches/{{batch_id}}"
inputParameters:
- name: batch_id
in: path
operations:
- name: get-batch
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks IT incident in ServiceNow for GTI.
naftiko: "0.5"
info:
label: "ServiceNow Incident Detail Check"
description: "Checks IT incident in ServiceNow for GTI."
tags:
- it-service
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: snow-incident
port: 8080
tools:
- name: check-incident
description: "Check incident at GTI."
inputParameters:
- name: incident_number
in: body
type: string
description: "Incident number."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
Looks up a ServiceNow IT incident by number, returning state, priority, assigned group, and resolution status.
naftiko: "0.5"
info:
label: "ServiceNow IT Incident Lookup"
description: "Looks up a ServiceNow IT incident by number, returning state, priority, assigned group, and resolution status."
tags:
- it-operations
- servicenow
capability:
exposes:
- type: mcp
namespace: it-ops
port: 8080
tools:
- name: get-incident
description: "Retrieve a ServiceNow incident by number."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://gti.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Searches SharePoint for compliance documents, cultivation SOPs, and regulatory filings by keyword.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Searches SharePoint for compliance documents, cultivation SOPs, and regulatory filings by keyword."
tags:
- documentation
- compliance
- sharepoint
capability:
exposes:
- type: mcp
namespace: documents
port: 8080
tools:
- name: search-documents
description: "Search SharePoint by keyword. Returns file names, URLs, and metadata."
inputParameters:
- name: keyword
in: body
type: string
description: "Search keyword."
call: "sharepoint.search"
with:
query: "{{keyword}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/gti-hub/drive/root/search(q='{{query}}')"
inputParameters:
- name: query
in: path
operations:
- name: search
method: GET
Retrieves SharePoint metadata at GTI.
naftiko: "0.5"
info:
label: "SharePoint File Metadata"
description: "Retrieves SharePoint metadata at GTI."
tags:
- document-management
- sharepoint
- collaboration
capability:
exposes:
- type: mcp
namespace: sp-docs
port: 8080
tools:
- name: get-file
description: "Look up file at GTI."
inputParameters:
- name: site_id
in: body
type: string
description: "Site ID."
- name: file_path
in: body
type: string
description: "Path."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
path: "{{file_path}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: size
type: number
mapping: "$.size"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/root:/{{path}}"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: get-file
method: GET
Monitors SLAs at GTI via Datadog and Slack.
naftiko: "0.5"
info:
label: "SLA Monitoring Pipeline"
description: "Monitors SLAs at GTI via Datadog and Slack."
tags:
- operations
- sla
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: sla-monitor
port: 8080
tools:
- name: check-sla
description: "Monitor SLAs at GTI."
inputParameters:
- name: service
in: body
type: string
description: "Service."
- name: target
in: body
type: number
description: "SLA target %."
steps:
- name: metrics
type: call
call: "datadog.get-sla"
with:
service: "{{service}}"
- name: check
type: call
call: "analytics.check-sla"
with:
uptime: "{{metrics.uptime}}"
target: "{{target}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#ops"
text: "SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)"
- name: log
type: call
call: "servicenow.create-incident"
with:
desc: "SLA breach: {{service}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/metrics"
operations:
- name: get-sla
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://gtigrows.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Checks Snowflake warehouse usage at GTI.
naftiko: "0.5"
info:
label: "Snowflake Warehouse Usage"
description: "Checks Snowflake warehouse usage at GTI."
tags:
- data
- snowflake
- analytics
capability:
exposes:
- type: mcp
namespace: sf-usage
port: 8080
tools:
- name: check-warehouse
description: "Check warehouse at GTI."
inputParameters:
- name: warehouse
in: body
type: string
description: "Warehouse."
call: "snowflake.get-usage"
with:
warehouse: "{{warehouse}}"
outputParameters:
- name: credits
type: number
mapping: "$.data.credits_used"
consumes:
- type: http
namespace: snowflake
baseUri: "https://gtigrows.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: warehouses
path: "/statements"
operations:
- name: get-usage
method: GET
Checks code quality at GTI.
naftiko: "0.5"
info:
label: "SonarQube Quality Check"
description: "Checks code quality at GTI."
tags:
- code-quality
- sonarqube
- devops
capability:
exposes:
- type: mcp
namespace: sq
port: 8080
tools:
- name: check-quality
description: "Check quality at GTI."
inputParameters:
- name: project
in: body
type: string
description: "Project key."
call: "sonarqube.get-measures"
with:
project: "{{project}}"
outputParameters:
- name: bugs
type: number
mapping: "$.component.measures[0].value"
consumes:
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.gtigrows.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: measures
path: "/measures/component"
operations:
- name: get-measures
method: GET
Searches Splunk at GTI.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Searches Splunk at GTI."
tags:
- security
- splunk
- logging
capability:
exposes:
- type: mcp
namespace: splunk-search
port: 8080
tools:
- name: search-logs
description: "Search logs at GTI."
inputParameters:
- name: query
in: body
type: string
description: "SPL query."
call: "splunk.search"
with:
query: "{{query}}"
outputParameters:
- name: count
type: number
mapping: "$.results.count"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.gtigrows.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
Tracks upcoming state license renewals by querying Oracle Cloud, creates a renewal task in ServiceNow, documents requirements in Confluence, uploads supporting documents to SharePoint, and notifies the regulatory affairs team via Microsoft Teams.
naftiko: "0.5"
info:
label: "State License Renewal Pipeline"
description: "Tracks upcoming state license renewals by querying Oracle Cloud, creates a renewal task in ServiceNow, documents requirements in Confluence, uploads supporting documents to SharePoint, and notifies the regulatory affairs team via Microsoft Teams."
tags:
- compliance
- licensing
- oracle-cloud
- servicenow
- confluence
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: license-renewal
port: 8080
tools:
- name: process-license-renewal
description: "Given a license number and state, retrieve details, create renewal task, document requirements, and notify the team."
inputParameters:
- name: license_number
in: body
type: string
description: "The state cannabis license number."
- name: state_code
in: body
type: string
description: "The state jurisdiction code."
- name: renewal_deadline
in: body
type: string
description: "Renewal deadline in YYYY-MM-DD format."
steps:
- name: get-license
type: call
call: "oracle-cloud.get-license"
with:
license_number: "{{license_number}}"
- name: create-renewal-task
type: call
call: "servicenow.create-task"
with:
short_description: "License renewal: {{license_number}} — {{state_code}}"
assigned_group: "Regulatory_Affairs"
description: "License: {{license_number}}. State: {{state_code}}. Type: {{get-license.license_type}}. Expires: {{renewal_deadline}}. Facilities: {{get-license.facility_count}}."
- name: document-requirements
type: call
call: "confluence.create-page"
with:
space_key: "REGAFF"
title: "License Renewal: {{license_number}} — {{state_code}}"
body: "License: {{license_number}}. State: {{state_code}}. Deadline: {{renewal_deadline}}. Task: {{create-renewal-task.number}}."
- name: provision-docs
type: call
call: "sharepoint.create-folder"
with:
site_id: "regulatory-filings"
folder_path: "Renewals/{{state_code}}/{{license_number}}"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
team_id: "regulatory-affairs"
channel_id: "license-renewals"
text: "License renewal initiated: {{license_number}} ({{state_code}}). Deadline: {{renewal_deadline}}. Task: {{create-renewal-task.number}}. Docs: {{provision-docs.url}}."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: licenses
path: "/licenses/{{license_number}}"
inputParameters:
- name: license_number
in: path
operations:
- name: get-license
method: GET
- type: http
namespace: servicenow
baseUri: "https://gti.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: confluence
baseUri: "https://gti.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: folders
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: post-channel-message
method: POST
Retrieves Teams activity at GTI.
naftiko: "0.5"
info:
label: "Teams Channel Activity"
description: "Retrieves Teams activity at GTI."
tags:
- communications
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: teams-activity
port: 8080
tools:
- name: get-activity
description: "Check Teams activity at GTI."
inputParameters:
- name: team_id
in: body
type: string
description: "Team ID."
- name: channel_id
in: body
type: string
description: "Channel ID."
call: "teams.get-messages"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
outputParameters:
- name: count
type: number
mapping: "$.value.length"
consumes:
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: get-messages
method: GET
Checks Terraform workspace at GTI.
naftiko: "0.5"
info:
label: "Terraform Workspace Check"
description: "Checks Terraform workspace at GTI."
tags:
- infrastructure
- terraform
- iac
capability:
exposes:
- type: mcp
namespace: tf-ws
port: 8080
tools:
- name: check-ws
description: "Check workspace at GTI."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Workspace ID."
call: "terraform.get-ws"
with:
workspace_id: "{{workspace_id}}"
outputParameters:
- name: name
type: string
mapping: "$.data.attributes.name"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/workspaces/{{workspace_id}}"
inputParameters:
- name: workspace_id
in: path
operations:
- name: get-ws
method: GET
Checks Vault secret at GTI.
naftiko: "0.5"
info:
label: "Vault Secret Metadata"
description: "Checks Vault secret at GTI."
tags:
- security
- vault
- secrets-management
capability:
exposes:
- type: mcp
namespace: vault
port: 8080
tools:
- name: check-secret
description: "Check secret at GTI."
inputParameters:
- name: path
in: body
type: string
description: "Secret path."
call: "vault.get-metadata"
with:
path: "{{path}}"
outputParameters:
- name: version
type: number
mapping: "$.data.current_version"
consumes:
- type: http
namespace: vault
baseUri: "https://vault.gtigrows.com/v1"
authentication:
type: bearer
token: "$secrets.vault_token"
resources:
- name: secrets
path: "/secret/metadata/{{path}}"
inputParameters:
- name: path
in: path
operations:
- name: get-metadata
method: GET
Processes invoices at GTI via OCR, SAP matching, approval, and Oracle recording.
naftiko: "0.5"
info:
label: "Vendor Invoice Processing Pipeline"
description: "Processes invoices at GTI via OCR, SAP matching, approval, and Oracle recording."
tags:
- finance
- accounts-payable
- sap
- oracle
capability:
exposes:
- type: mcp
namespace: invoice-proc
port: 8080
tools:
- name: process-invoice
description: "Process invoices at GTI."
inputParameters:
- name: invoice_id
in: body
type: string
description: "Invoice ID."
- name: vendor_id
in: body
type: string
description: "Vendor ID."
steps:
- name: extract
type: call
call: "ocr.extract"
with:
doc: "{{invoice_id}}"
- name: match
type: call
call: "sap.match-po"
with:
vendor: "{{vendor_id}}"
amount: "{{extract.total}}"
- name: approve
type: call
call: "workflow.submit"
with:
invoice: "{{invoice_id}}"
- name: record
type: call
call: "oracle.create-payment"
with:
invoice: "{{invoice_id}}"
consumes:
- type: http
namespace: ocr
baseUri: "https://ocr.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.ocr_token"
resources:
- name: invoices
path: "/extract"
operations:
- name: extract
method: POST
- type: http
namespace: sap
baseUri: "https://sap.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: pos
path: "/match"
operations:
- name: match-po
method: POST
- type: http
namespace: workflow
baseUri: "https://workflow.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.workflow_token"
resources:
- name: approvals
path: "/submit"
operations:
- name: submit
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: payments
path: "/payments"
operations:
- name: create-payment
method: POST
When a new vendor is approved, creates the supplier in Oracle Cloud, opens a ServiceNow compliance checklist, uploads the contract to SharePoint, and notifies procurement via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor Onboarding Orchestrator"
description: "When a new vendor is approved, creates the supplier in Oracle Cloud, opens a ServiceNow compliance checklist, uploads the contract to SharePoint, and notifies procurement via Microsoft Teams."
tags:
- procurement
- vendor-management
- oracle-cloud
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vendor-onboarding
port: 8080
tools:
- name: onboard-vendor
description: "Given vendor details, create the supplier record, compliance task, store contract, and notify procurement."
inputParameters:
- name: vendor_name
in: body
type: string
description: "The vendor company name."
- name: vendor_email
in: body
type: string
description: "The vendor primary contact email."
- name: vendor_type
in: body
type: string
description: "Vendor type (e.g. packaging, nutrients, equipment)."
steps:
- name: create-supplier
type: call
call: "oracle-cloud.create-supplier"
with:
name: "{{vendor_name}}"
contact_email: "{{vendor_email}}"
type: "{{vendor_type}}"
- name: create-compliance-task
type: call
call: "servicenow.create-task"
with:
short_description: "Vendor compliance: {{vendor_name}}"
assigned_group: "Procurement_Compliance"
description: "Complete cannabis industry compliance review for {{vendor_name}} ({{vendor_type}}). Supplier ID: {{create-supplier.supplier_id}}."
- name: upload-contract
type: call
call: "sharepoint.upload-file"
with:
site_id: "procurement-docs"
folder_path: "Contracts/{{vendor_name}}"
- name: notify-procurement
type: call
call: "msteams.post-channel-message"
with:
team_id: "procurement"
channel_id: "vendor-management"
text: "New vendor onboarded: {{vendor_name}} ({{vendor_type}}). ID: {{create-supplier.supplier_id}}. Compliance task: {{create-compliance-task.number}}. Contract: {{upload-contract.url}}."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: servicenow
baseUri: "https://gti.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/sc_task"
operations:
- name: create-task
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Reviews vendors at GTI.
naftiko: "0.5"
info:
label: "Quarterly Vendor Review Pipeline"
description: "Reviews vendors at GTI."
tags:
- procurement
- vendor-management
- review
capability:
exposes:
- type: mcp
namespace: vendor-review
port: 8080
tools:
- name: review-vendor
description: "Review vendors at GTI."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: quarter
in: body
type: string
description: "Quarter."
steps:
- name: perf
type: call
call: "procurement.get-metrics"
with:
vendor: "{{vendor_id}}"
q: "{{quarter}}"
- name: scorecard
type: call
call: "analytics.scorecard"
with:
data: "{{perf.data}}"
- name: invite
type: call
call: "email.send"
with:
to: "{{perf.contact}}"
subject: "QBR - {{quarter}}"
- name: schedule
type: call
call: "calendar.create-event"
with:
title: "QBR - {{perf.name}}"
consumes:
- type: http
namespace: procurement
baseUri: "https://procurement.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.procurement_token"
resources:
- name: vendors
path: "/vendors/{{vendor}}/metrics"
inputParameters:
- name: vendor
in: path
operations:
- name: get-metrics
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: scorecards
path: "/compute"
operations:
- name: scorecard
method: POST
- type: http
namespace: email
baseUri: "https://email.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/proc/events"
operations:
- name: create-event
method: POST
Aggregates weekly sales from Oracle Cloud, correlates with web traffic from Google Analytics, refreshes the Power BI dashboard, and posts the summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "Weekly Dispensary Sales Report Pipeline"
description: "Aggregates weekly sales from Oracle Cloud, correlates with web traffic from Google Analytics, refreshes the Power BI dashboard, and posts the summary to Microsoft Teams."
tags:
- dispensary
- sales
- reporting
- oracle-cloud
- google-analytics
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sales-reporting
port: 8080
tools:
- name: generate-weekly-sales
description: "Given a week ending date, aggregate dispensary sales, web data, refresh dashboard, and notify leadership."
inputParameters:
- name: week_ending
in: body
type: string
description: "Week ending date in YYYY-MM-DD format."
steps:
- name: get-sales
type: call
call: "oracle-cloud.get-sales-summary"
with:
week_ending: "{{week_ending}}"
- name: get-web-data
type: call
call: "google-analytics.run-report"
with:
end_date: "{{week_ending}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "dispensary-sales"
- name: post-summary
type: call
call: "msteams.post-channel-message"
with:
team_id: "leadership"
channel_id: "weekly-reports"
text: "Weekly Sales (w/e {{week_ending}}): Revenue: ${{get-sales.total_revenue}}. Transactions: {{get-sales.transaction_count}}. Online traffic: {{get-web-data.sessions}}. Dashboard refreshed."
consumes:
- type: http
namespace: oracle-cloud
baseUri: "https://gti.oraclecloud.com/fscmRestApi/resources/v1"
authentication:
type: bearer
token: "$secrets.oracle_cloud_token"
resources:
- name: sales-summary
path: "/salesSummary"
operations:
- name: get-sales-summary
method: GET
- type: http
namespace: google-analytics
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves employee profile from Workday for GTI.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves employee profile from Workday for GTI."
tags:
- hr
- workday
- employee-directory
capability:
exposes:
- type: mcp
namespace: workday-profile
port: 8080
tools:
- name: get-employee-profile
description: "Look up GTI employee in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "workday.get-worker"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: name
type: string
mapping: "$.worker.name"
- name: title
type: string
mapping: "$.worker.title"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5.gtigrows.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
Retrieves an employee profile from Workday by worker ID, returning name, department, job title, location, and manager.
naftiko: "0.5"
info:
label: "Workday Employee Record"
description: "Retrieves an employee profile from Workday by worker ID, returning name, department, job title, location, and manager."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: hr
port: 8080
tools:
- name: get-employee
description: "Look up an employee in Workday. Returns name, department, title, and manager."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Checks Zendesk ticket at GTI.
naftiko: "0.5"
info:
label: "Zendesk Ticket Check"
description: "Checks Zendesk ticket at GTI."
tags:
- support
- zendesk
- ticketing
capability:
exposes:
- type: mcp
namespace: zd-ticket
port: 8080
tools:
- name: check-ticket
description: "Check ticket at GTI."
inputParameters:
- name: ticket_id
in: body
type: string
description: "Ticket ID."
call: "zendesk.get-ticket"
with:
id: "{{ticket_id}}"
outputParameters:
- name: status
type: string
mapping: "$.ticket.status"
consumes:
- type: http
namespace: zendesk
baseUri: "https://gtigrows.com.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{id}}.json"
inputParameters:
- name: id
in: path
operations:
- name: get-ticket
method: GET