diff --git a/README.md b/README.md index 21d61e6..a59220c 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,9 @@ A web UI for browsing, configuring, and deploying [MCP](https://modelcontextprot - ⚙️ **Configure** — Fill in environment variables, arguments, file mounts, and ServiceAccount via web form - 👁️ **Live YAML Preview** — See the `MCPServer` CR update in real-time as you type (htmx) - ▶️ **Deploy** — Create `MCPServer` custom resources, Secrets, and ConfigMaps with one click +- 🚀 **One-Click Deploy** — Catalog entries with a `crTemplate` get a "Deploy" button directly on the card, skipping the configuration form +- 🔒 **Root Override** — UI checkbox to set `runAsNonRoot: false` for images that require root (e.g. Insights, Satellite) +- 🌐 **Gateway Integration** — Automatically creates `HTTPRoute` resources for deployed MCPServer instances via a configurable Gateway API gateway - 🗑️ **Cleanup** — Delete running servers and all managed artifacts ## 📦 Catalog Format @@ -30,12 +33,30 @@ Catalog entries are Kubernetes ConfigMaps with the label `mcp.x-k8s.io/catalog-e }], "_meta": { "io.openshift/k8s": { - "defaultPort": 8080 + "defaultPort": 8080, + "runAsRoot": false, + "needsServiceAccount": true, + "serviceAccountHint": "Needs a ServiceAccount bound to the 'view' ClusterRole", + "configMaps": [{ + "label": "Server Config", + "defaultContent": "key = \"value\"\n", + "fileName": "config.toml", + "mountPath": "/etc/mcp-config" + }], + "crTemplate": { + "source": { + "type": "ContainerImage", + "containerImage": { "ref": "quay.io/example/my-mcp-server:latest" } + }, + "config": { "port": 8080, "path": "/mcp" } + } } } } ``` +When `crTemplate` is present, the catalog card shows a one-click "Deploy" button that creates the `MCPServer` CR directly, skipping the configuration form. + Kubernetes-specific extensions live under `_meta` → `io.openshift/k8s` per the standard's publisher metadata mechanism. ## 🛠️ Quick Start @@ -81,27 +102,45 @@ make test # Run tests ### Container Image ```bash -make docker-build # Build with podman (ubi9/go-toolset + ubi9-micro) -make docker-push # Push to quay.io/matzew/mcp-launcher:latest +make image-build # Build container image with podman (ubi9/go-toolset + ubi9-micro) +make image-push # Push to quay.io/matzew/mcp-launcher:latest +make image # Build and push in one step +``` + +### Cluster Operations + +```bash +make install # Apply dist/mcp-launcher.yaml (single-file install) +make uninstall # Remove everything installed by dist/mcp-launcher.yaml +make deploy # Deploy RBAC, launcher, and catalog to cluster +make undeploy # Remove launcher and catalog from cluster +make rollout # Restart the launcher deployment and wait for readiness +make release # Build, push, deploy, and rollout (full release cycle) +make dist # Regenerate dist/mcp-launcher.yaml from deploy/ manifests ``` ## 📁 Project Structure ``` -├── main.go # HTTP server, routes, kubeconfig +├── main.go # HTTP server, routes, kubeconfig ├── catalog/ -│ ├── types.go # MCP Registry-aligned structs -│ └── catalog.go # ConfigMap-backed catalog store +│ ├── types.go # MCP Registry-aligned structs +│ ├── types_test.go +│ ├── catalog.go # ConfigMap-backed catalog store +│ └── catalog_test.go ├── handlers/ -│ └── handlers.go # HTTP handlers (catalog, configure, run, delete) -├── templates/ # Go HTML templates (htmx) +│ ├── handlers.go # HTTP handlers (catalog, configure, deploy, delete, gateway) +│ └── handlers_test.go +├── templates/ # Go HTML templates (htmx) +│ └── partials/ # htmx partial fragments ├── deploy/ -│ ├── catalog/ # Sample catalog ConfigMaps (5 servers) -│ ├── deployment.yaml # Deployment + Service -│ └── rbac/ # ServiceAccount, ClusterRole, ClusterRoleBinding +│ ├── catalog/ # Sample catalog ConfigMaps (5 servers) +│ ├── deployment.yaml # Deployment + Service +│ └── rbac/ # ServiceAccount, ClusterRole, ClusterRoleBinding ├── dist/ -│ └── mcp-launcher.yaml # Single-file install (all resources) -├── Dockerfile # Multi-stage: ubi9/go-toolset → ubi9-micro +│ └── mcp-launcher.yaml # Single-file install (all resources) +├── docs/ # Architecture and design documentation +├── Dockerfile # Multi-stage: ubi9/go-toolset → ubi9-micro └── Makefile ```