Static MCP
Route to a static Model Context Protocol (MCP) server. For more information, see the About MCP topic.
Before you begin
-
Follow the Get started guide to install kgateway with agentgateway enabled.
-
Make sure that agentgateway is enabled in kgateway.
helm get values kgateway -n kgateway-system -o yaml
Example output:
agentgateway: enabled: true
Step 1: Deploy an MCP server
Deploy a Model Context Protocol (MCP) server that you want agentgateway to proxy traffic to. The following example sets up a simple MCP server with one tool, fetch
, that retrieves the content of a website URL that you pass in.
-
Create the MCP server workload. Notice that the Service uses the
appProtocol: kgateway.dev/mcp
setting. This way, kgateway configures the agentgateway proxy to use MCP for the Backend that you create in the next step.kubectl apply -f- <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: mcp-website-fetcher spec: selector: matchLabels: app: mcp-website-fetcher template: metadata: labels: app: mcp-website-fetcher spec: containers: - name: mcp-website-fetcher image: ghcr.io/peterj/mcp-website-fetcher:main imagePullPolicy: Always --- apiVersion: v1 kind: Service metadata: name: mcp-website-fetcher labels: app: mcp-website-fetcher spec: selector: app: mcp-website-fetcher ports: - port: 80 targetPort: 8000 appProtocol: kgateway.dev/mcp EOF
-
Create a Backend that sets up the agentgateway target details for the MCP server.
kubectl apply -f- <<EOF apiVersion: gateway.kgateway.dev/v1alpha1 kind: Backend metadata: name: mcp-backend spec: type: MCP mcp: name: mcp-server targets: - static: name: mcp-target host: mcp-website-fetcher.default.svc.cluster.local port: 80 protocol: SSE EOF
Step 2: Route with agentgateway
Route to the MCP server with agentgateway.
-
Create a Gateway resource that uses the
agentgateway
GatewayClass. Kgateway automatically spins up an agentgateway proxy for you.kubectl apply -f- <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: agentgateway spec: gatewayClassName: agentgateway listeners: - protocol: HTTP port: 8080 name: http allowedRoutes: namespaces: from: All EOF
-
Verify that the Gateway is created successfully. You can also review the external address that is assigned to the Gateway. Note that depending on your environment it might take a few minutes for the load balancer service to be assigned an external address. If you are using a local Kind cluster without a load balancer such as
metallb
, you might not have an external address.kubectl get gateway agentgateway
Example output:
NAME CLASS ADDRESS PROGRAMMED AGE agentgateway agentgateway 1234567890.us-east-2.elb.amazonaws.com True 93s
-
Create an HTTPRoute resource that routes to the Backend that you created in the previous step.
kubectl apply -f- <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: mcp spec: parentRefs: - name: agentgateway rules: - backendRefs: - name: mcp-backend group: gateway.kgateway.dev kind: Backend EOF
Step 3: Verify the connection
Use the MCP Inspector tool to verify that you can connect to your sample MCP server through agentgateway.
-
Get the agentgateway address.
export INGRESS_GW_ADDRESS=$(kubectl get gateway agentgateway -o=jsonpath="{.status.addresses[0].value}") echo $INGRESS_GW_ADDRESS
kubectl port-forward deployment/agentgateway 8080:8080
-
From the terminal, run the MCP Inspector command. Then, the MCP Inspector opens in your browser.
npx modelcontextprotocol/inspector#0.16.2
-
From the MCP Inspector menu, connect to your agentgateway address as follows:
- Transport Type: Select
Streamable HTTP
. - URL: Enter the agentgateway address and the
/mcp
path, such as${INGRESS_GW_ADDRESS}/mcp
orhttp://localhost:8080/mcp
. - Click Connect.
- Transport Type: Select
-
From the menu bar, click the Tools tab. Then from the Tools pane, click List Tools and select the
fetch
tool. -
From the fetch pane, in the url field, enter a website URL, such as
https://lipsum.com/
, and click Run Tool. -
Verify that you get back the fetched URL content.
Cleanup
You can remove the resources that you created in this guide.kubectl delete Deployment mcp-website-fetcher
kubectl delete Service mcp-website-fetcher
kubectl delete Backend mcp-backend
kubectl delete Gateway agentgateway
kubectl delete HTTPRoute mcp