Build1 distinct publisher3 min readUpdated
A dev.to walkthrough on agentgateway makes a narrow point worth taking seriously: an agent that retries on failure will keep hitting an unrated MCP server until something gives.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
A walkthrough published on dev.to argues that an MCP server with no cap on how many times an agent or LLM can call it is exposed to denial of service, memory hogging, large API bills and general server overload [1]. The mechanism the author names is the part operators should care about: LLMs retry when a call errors, because returning some answer is treated as better than returning none, so one failing tool call can become a loop nobody scheduled [2][3].
The author's analogy is a memory leak: software that keeps taking resources it no longer needs until the host runs out and something crashes [4]. Applied to MCP, the claim is that an unlimited retry loop either runs up the API bill or consumes available memory on the machine serving the agent [3].
The traffic shape matters for where that load lands. According to the post, an MCP client calls tools/list once, caches the tool schemas locally by name, description and input parameters, and thereafter picks tools from that cache rather than re-listing, which would waste tokens [5][6][7]. A tool call itself is a plain HTTP POST to /mcp carrying a JSON-RPC tools/call, answered with a 200 and a result [8]. If discovery happens once per session and is cached, then retry volume does not spread across the protocol; it concentrates on tools/call [9].
There is also a control-plane gap the post identifies. LLM rate limiting can be expressed as requests per window or as tokens per window, for example 100 tokens a minute, while MCP rate limiting is about the number of requests to the MCP server in a given window [10][11]. A token budget on the model therefore does not bound how many times the MCP server is hit, because the two limits count different units [12].
The implementation shown uses agentgateway on a Kubernetes cluster, with Kind or Minikube named as sufficient, plus a GitHub account [13]. It is two pieces of configuration: a gateway that fronts the MCP server, and the rate limiting policy itself [14]. The example targets the GitHub Copilot MCP server on the grounds that most readers already have GitHub access [15]. The plumbing is an Opaque Secret holding a GitHub PAT as an Authorization bearer value in the agentgateway-system namespace [16], a Gateway with gatewayClassName agentgateway listening on port 3000 over HTTP and accepting routes from the same namespace [17], and an AgentgatewayBackend of apiVersion agentgateway.dev/v1alpha1 with stateless session routing to api.githubcopilot.com on port 443, path /mcp/, over StreamableHTTP, with TLS and the PAT secret attached [18].
Two honesty notes. The retry premise is asserted, not measured: the post names no specific client, no retry count, and no recommended requests-per-minute figure [19]. And the material available here stops at the routing step, before the rate limiting policy is shown, so the policy syntax is not something I can describe [20].
What to watch is what the limit does to the caller. If an agent retries on any error [2], a rate limit rejection is also an error, so a gateway cap bounds the requests you forward and pay for, not the requests attempted [21]. Instrument both counters separately, or you will read a flat downstream graph as a fixed loop. Watch the PAT handling too: the example exports the token into a shell variable and pipes it into a heredoc [22], which is fine for a demo and a credential-in-history problem in a terminal you share.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The author's analogy is an application memory leak: a bug that lets software keep consuming RAM it no longer needs until the system runs out of memory and a crash occurs.
When a client or agent begins a request it hits tools/list one time to learn which MCP tools are available.
The client or agent caches the tool schemas locally, including name, description and input parameters, so it is not always calling tools/list, which would be inefficient and waste tokens.
When told to make a call, the agent looks at its local cache to see which tools fit and then uses the tool to perform an action, for example search_repositories on the GitHub Copilot MCP server.
A typical MCP client HTTP tool call is an HTTP POST to /mcp carrying JSON-RPC tools/call, answered by an HTTP 200 OK with a JSON-RPC result.
LLM rate limiting can specify the number of requests to an LLM in a timeframe, or limit tokens in a timeframe, for example 100 tokens every minute.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Verifiable config, asserted threat model
The configuration half is concrete and checkable - verbatim manifests for the Secret, Gateway, AgentgatewayBackend and HTTPRoute plus curl requests against the gateway - and the MCP call workflow it describes is internally consistent. The argumentative half is unsupported: the retry mechanism that drives the whole thesis names no client, retry count or backoff, the four named failure modes rest on a memory-leak analogy rather than measurement, and the text is truncated before the rate limit policy or any 429 result is shown. Single publisher, no corroboration.
No adoption signal in sources
The single supplied source is an authored tutorial. It contains no release, deployment, usage disclosure, benchmark, pricing or licence datapoint for agentgateway, MCP rate limiting, or the GitHub Copilot MCP Server - only the author's own local walkthrough. Nothing here supports an adoption measurement, so none is inferred.
Framing outruns the demonstration
The stated stakes - DOS attacks, memory hogging, insane API bills, system crashes - are considerably stronger than what the source shows, which is that eleven requests succeed by default and that a policy could cap them. The memory-leak analogy is rhetorical rather than mechanistic for a remote HTTP MCP call, the retry premise is unquantified, and the article ends before the policy that would substantiate the fix. The underlying narrow point (an ungoverned MCP path forwards unbounded agent traffic) is sound, which keeps the gap moderate rather than severe.
No disclosed affiliation or sponsorship
The post advocates one specific tool (agentgateway) end to end, but the supplied material discloses no employment, sponsorship, vendor relationship or commercial arrangement for the author, and no affiliation can be established from the text without inference. Incentive strength is therefore not measurable from these sources.
Low - one truncated tutorial
Confidence is limited by cluster shape as much as content: a single publisher, a single item, and a body that ends mid-manifest. What can be trusted is narrow and mechanical - the manifests, the described tools/list-then-cache workflow, and the unit distinction between token and request limits. The causal story about retrying agents producing billing or availability incidents cannot be verified from what is supplied, and there is no adoption or incentive evidence to triangulate against.
build
The MCP transport your search results teach has been deprecated since March1 distinct publisher
build
Your meter now runs on someone else's machine: signed receipts, fsync, and failing open1 distinct publisher
build
MCP 2026-07-28 drops the `result` wrapper, and your unit tests will not notice1 distinct publisher
build
A ttlMs on tools/list is a promise, not a receipt1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 15, 2026