Files
hermes-mcp/hermes-k8s.yaml
Garfield adebe29ca0 feat: Slack alerts for chat widget escalations + support@ email polling
- notifications/slack.ts: added sendChatEscalationAlert (fires when visitor
  asks about pricing, demo, help, or a human) and sendSupportEmailAlert
- email-poller.ts: polls support@squaremcp.com every 5 min via IMAP,
  deduplicates with Redis (support📧alerted_uids), fires Slack alert
  for each new unseen message
- index.ts: detectEscalation() scans last user message for trigger phrases;
  chat endpoint fires alert fire-and-forget after responding; startEmailPoller()
  called on server boot

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15 21:47:43 -04:00

193 lines
6.1 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: hermes-mcp
namespace: fetcherpay
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: hermes-mcp
template:
metadata:
labels:
app: hermes-mcp
spec:
hostNetwork: true
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
containers:
- name: hermes-mcp
image: localhost:32000/hermes-mcp@sha256:0bd3355cc4b5a3727e56cd62364127deb8801d41f4e3b9dc48e9051e11f52b8f
imagePullPolicy: Always
securityContext:
allowPrivilegeEscalation: false
ports:
- containerPort: 3456
env:
- name: PORT
value: "3456"
- name: SERVER_URL
value: "https://hermes.squaremcp.com"
- name: MCP_API_KEY
value: "114521f3f9e6858480d6269446a446ef"
- name: YAHOO_EMAIL
value: "gheron01@yahoo.com"
- name: YAHOO_APP_PASSWORD
value: "lzlleytmslxocxae"
- name: FETCHERPAY_EMAIL
value: "garfield.heron@fetcherpay.com"
- name: FETCHERPAY_PASSWORD
value: "onelove"
- name: FETCHERPAY_IMAP_HOST
value: "23.120.207.35"
- name: FETCHERPAY_IMAP_PORT
value: "30993"
- name: FETCHERPAY_SMTP_HOST
value: "23.120.207.35"
- name: FETCHERPAY_SMTP_PORT
value: "30587"
- name: GARFIELD_EMAIL
value: "garfield@fetcherpay.com"
- name: GARFIELD_PASSWORD
value: "onelove"
- name: SALES_EMAIL
value: "sales@fetcherpay.com"
- name: SALES_PASSWORD
value: "onelove"
- name: LEADS_EMAIL
value: "leads@fetcherpay.com"
- name: LEADS_PASSWORD
value: "onelove"
- name: FOUNDER_EMAIL
value: "founder@fetcherpay.com"
- name: FOUNDER_PASSWORD
value: "onelove"
- name: OBSIDIAN_VAULT_PATH
value: "/vaults"
- name: SYNCTHING_URL
value: "http://10.1.58.192:8384"
- name: SYNCTHING_API_KEY
value: "PRWss5jFKX7VaHRr5LcJnbJHyFWuWuMH"
- name: SYNCTHING_FOLDER_ID
value: "obsidian-vault"
- name: GMAIL_EMAIL
value: "garfield.heron@gmail.com"
- name: GMAIL_APP_PASSWORD
value: "ldmk duee movy hruy"
- name: SQCP_GARFIELD_EMAIL
value: "garfield@squaremcp.com"
- name: SQCP_GARFIELD_PASSWORD
value: "onelove"
- name: SQCP_INFO_EMAIL
value: "info@squaremcp.com"
- name: SQCP_INFO_PASSWORD
value: "onelove"
- name: SQCP_SALES_EMAIL
value: "sales@squaremcp.com"
- name: SQCP_SALES_PASSWORD
value: "onelove"
- name: SQCP_SUPPORT_EMAIL
value: "support@squaremcp.com"
- name: SQCP_SUPPORT_PASSWORD
value: "onelove"
- name: SQCP_FOUNDER_EMAIL
value: "founder@squaremcp.com"
- name: SQCP_FOUNDER_PASSWORD
value: "onelove"
- name: SQCP_CONTACT_EMAIL
value: "contact@squaremcp.com"
- name: SQCP_CONTACT_PASSWORD
value: "onelove"
- name: SQCP_ADMIN_EMAIL
value: "admin@squaremcp.com"
- name: SQCP_ADMIN_PASSWORD
value: "onelove"
- name: MYSQL_HOST
value: "127.0.0.1"
- name: MYSQL_PORT
value: "3306"
- name: MYSQL_USER
value: "root"
- name: MYSQL_PASSWORD
value: "fetcherpay"
- name: REDIS_URL
value: "redis://127.0.0.1:6379"
- name: CREDENTIAL_ENCRYPTION_KEY
value: "4ef9c48e9f4e5dfa843d4bfcc3a8f69c5ad5738326c8b0e878076853ae4b8416"
- name: OAUTH_CLIENT_ID
value: "fecb863c9aa334aba93c9017f4b9bee8"
- name: OAUTH_CLIENT_SECRET
value: "761c17a9a49670489ccf93ccffd344dbfc642ae994ac2ee991dbb42de3f6c3af"
- name: SLACK_DEFAULT_BOT_TOKEN
value: "xoxb-11134355044818-11132324783798-shAhtLsZT2GpTUI0pJlYsmrE"
- name: SLACK_PILOT_WEBHOOK_URL
value: "https://hooks.slack.com/services/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"
- name: ANTHROPIC_API_KEY
value: "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"
volumeMounts:
- name: vaults
mountPath: /vaults
readinessProbe:
httpGet:
path: /health
port: 3456
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 3456
initialDelaySeconds: 10
periodSeconds: 30
volumes:
- name: vaults
hostPath:
path: /home/garfield/obsidian/vaults
type: Directory
---
apiVersion: v1
kind: Service
metadata:
name: hermes-mcp
namespace: fetcherpay
spec:
selector:
app: hermes-mcp
ports:
- protocol: TCP
port: 3456
targetPort: 3456
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hermes-ingress
namespace: fetcherpay
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-buffering: "off"
spec:
ingressClassName: nginx
rules:
- host: hermes.squaremcp.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: hermes-mcp
port:
number: 3456
tls:
- hosts:
- hermes.squaremcp.com
secretName: hermes-squaremcp-tls