Skip to content
Latest (currently 2026.8.0) has the newest features, bug fixes, and CVE patches of Solo Enterprise for agentregistry.

For the complete documentation index, see llms.txt. Markdown versions of all docs pages are available by appending .md to any docs URL.

Remote MCP gateway (virtual runtime)

Page as Markdown

Install Solo Enterprise for agentgateway and connect it as a virtual runtime so that the registry can expose remote MCP servers through a central proxy.

Install Solo Enterprise for agentgateway and configure it as a virtual runtime in Solo Enterprise for agentregistry. The virtual runtime uses the Kubernetes Gateway API route delegation model: a gateway admin creates the parent Gateway and HTTPRoute once and grants delegation to the registry namespace. After that, registry users can add MCP servers and expose them on the gateway without any further input from the gateway admin.

Before you begin

  1. Set up an OIDC provider. This guide assumes that you installed Keycloak. Make sure to follow the General setup tab to install Keycloak with the required realm settings, clients, and secrets.

  2. Install Solo Enterprise for agentregistry and the arctl CLI.

  3. Save your Solo Enterprise for agentgateway license key in an environment variable. To obtain the key, contact an account representative.

    export AGENTGATEWAY_LICENSE_KEY=<agentgateway-license-key>

Step 1: Install Solo Enterprise for agentgateway

Install Solo Enterprise for agentgateway and the Kubernetes Gateway API CRDs in your cluster.

  1. Set the Solo Enterprise for agentgateway version.

    export AGENTGATEWAY_VERSION=v2026.9.0
  2. Install the standard Gateway API CRDs, which include the Gateway, HTTPRoute, and related resources.

    kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.5.0/standard-install.yaml
  3. Install the Solo Enterprise for agentgateway CRDs.

    helm upgrade -i enterprise-agentgateway-crds \
      oci://us-docker.pkg.dev/solo-public/enterprise-agentgateway/charts/enterprise-agentgateway-crds \
      --create-namespace \
      --namespace agentgateway-system \
      --version "${AGENTGATEWAY_VERSION}"
  4. Install the Solo Enterprise for agentgateway controller and data plane.

    helm upgrade -i enterprise-agentgateway \
      oci://us-docker.pkg.dev/solo-public/enterprise-agentgateway/charts/enterprise-agentgateway \
      -n agentgateway-system \
      --version "${AGENTGATEWAY_VERSION}" \
      --set-string licensing.licenseKey="${AGENTGATEWAY_LICENSE_KEY}"
  5. Verify that the control plane pod is running.

    kubectl get pods -n agentgateway-system

    Example output:

    NAME                                                     READY   STATUS    RESTARTS   AGE
    enterprise-agentgateway-controller-7d9f8b6d4c-xvpzk     1/1     Running   0          45s
    

Step 2: Create the Gateway and parent HTTPRoute

Create the Gateway and parent HTTPRoute that the agentgateway proxy uses to accept MCP traffic. Both resources must carry the agentregistry.solo.io/runtime: mcp-gateway label so that the registry can discover them and populate the exposedAt URL on each Deployment.

  1. Create the Gateway.

    kubectl apply -f - <<EOF
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: agentgateway-proxy
      namespace: agentgateway-system
      labels:
        agentregistry.solo.io/runtime: mcp-gateway
    spec:
      gatewayClassName: enterprise-agentgateway
      listeners:
      - protocol: HTTP
        port: 80
        name: http
        allowedRoutes:
          namespaces:
            from: All
    EOF

    Note

    This example uses an HTTP listener for simplicity. Production deployments typically add an HTTPS listener with a TLS certificate.

  2. Create the parent HTTPRoute that delegates traffic on the /registry path prefix to every child HTTPRoute that the registry creates in the agentregistry-system namespace.

    kubectl apply -f - <<EOF
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: agentregistry-delegate
      namespace: agentgateway-system
      labels:
        agentregistry.solo.io/runtime: mcp-gateway
    spec:
      parentRefs:
      - name: agentgateway-proxy
      rules:
      - matches:
        - path:
            type: PathPrefix
            value: /registry
        backendRefs:
        - group: gateway.networking.k8s.io
          kind: HTTPRoute
          name: "*"
          namespace: agentregistry-system
    EOF
  3. Verify that the gateway proxy pod is running.

    kubectl get pods -n agentgateway-system | grep agentgateway-proxy

    Example output:

    agentgateway-proxy-64c4bf7c4c-gzfhj   1/1     Running   0          93s
    

Step 3: Register the virtual runtime

Create a Virtual runtime in Solo Enterprise for agentregistry. The name field must match the agentregistry.solo.io/runtime label value that you set on the Gateway and parent HTTPRoute in the previous step.

  1. Create the runtime.

    arctl apply -f - <<EOF
    apiVersion: ar.dev/v1alpha1
    kind: Runtime
    metadata:
      name: mcp-gateway
    spec:
      type: Virtual
    EOF

    Example output:

    ✓ Runtime/mcp-gateway created
    
  2. Verify that the runtime appears in the catalog.

    arctl get runtimes

    Example output:

    NAME                 TYPE
    kubernetes-default   Kubernetes
    local                Local
    mcp-gateway          Virtual
    virtual-default      Virtual
    

Next steps

With the virtual runtime in place, register MCP servers in the catalog and expose them through the gateway. The following quickstart walks you through the full setup end-to-end, including JWT authentication, group-level access control, per-user tool filtering, and rate limiting.