First shot at MCP server

This commit is contained in:
Ian Keane 2026-08-22 12:36:58 -04:00
parent 2e5b27c59c
commit 675edad612
6 changed files with 162 additions and 1 deletions

18
apps/mcp.yaml Normal file
View file

@ -0,0 +1,18 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: mcp
namespace: argocd
spec:
project: default
source:
repoURL: https://forge.keane.sh/ian/dumpnet-argo.git
targetRevision: HEAD
path: manifests/mcp
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true

View file

@ -0,0 +1,5 @@
apiVersion: v2
name: forgejo-mcp
description: Forgejo MCP server for AI assistant access to git repos
type: application
version: 0.1.0

View file

@ -0,0 +1,21 @@
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: forgejo-mcp-secrets
namespace: mcp
spec:
refreshInterval: 1h
secretStoreRef:
name: aws-secrets-manager
kind: ClusterSecretStore
target:
name: forgejo-mcp-secrets
data:
- secretKey: FORGEJO_TOKEN
remoteRef:
key: dumpnet
property: forgejo.token
- secretKey: FORGEJO_MCP_API_KEY
remoteRef:
key: dumpnet
property: forgejo.mcp_api_key

View file

@ -0,0 +1,97 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: forgejo-mcp
namespace: mcp
spec:
replicas: 1
selector:
matchLabels:
app: forgejo-mcp
template:
metadata:
labels:
app: forgejo-mcp
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
seccompProfile:
type: RuntimeDefault
containers:
- name: forgejo-mcp
image: richarvey/forgejo-mcp:latest
ports:
- containerPort: 3000
env:
- name: FORGEJO_URL
value: https://forge.keane.sh
- name: PORT
value: "3000"
- name: RATE_LIMIT_MAX
value: "100"
- name: RATE_LIMIT_WINDOW_MS
value: "60000"
envFrom:
- secretRef:
name: forgejo-mcp-secrets
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
readOnlyRootFilesystem: true
volumeMounts:
- name: tmp
mountPath: /tmp
readinessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 15
periodSeconds: 30
volumes:
- name: tmp
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: forgejo-mcp
namespace: mcp
spec:
selector:
app: forgejo-mcp
ports:
- port: 80
targetPort: 3000
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: forgejo-mcp
namespace: mcp
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- git-mcp.dumpnet.chat
secretName: forgejo-mcp-tls
rules:
- host: git-mcp.dumpnet.chat
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: forgejo-mcp
port:
number: 80

View file

@ -0,0 +1,20 @@
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: forgejo-mcp
namespace: argocd
spec:
project: default
source:
repoURL: https://forge.keane.sh/ian/dumpnet-argo.git
targetRevision: HEAD
path: charts/forgejo-mcp
destination:
server: https://kubernetes.default.svc
namespace: mcp
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true

View file

@ -1,2 +1,2 @@
hosted_zone_id = "Z068835512G0ZQJ9SJGOI"
dns_records = ["argocd", "todo"]
dns_records = ["argocd", "todo", "git-mcp"]