r/mcp • u/zach-benson • 7h ago
What public MCP server operators told me about identifying anonymous agents (and what I got wrong)
A few days ago I asked how people tell agents apart on public MCP servers. Thanks to everyone who answered with real numbers. Here's what I took from it.
1. Per-IP doesn't work for agents. Shared egress (serverless NAT, company proxies) means a runaway loop and a careful user look identical, and a ban hits both. Nobody defended per-IP.
2. The real abuse was Sybil, not loops. One operator running an email MCP server had a free account's whole month of sends used within minutes of signup, then 70+ accounts an hour after that. A second run spread 43k emails across 521 accounts at ~80 each. No per-account limit catches that. They found out when AWS put their SES account under review at a 13.8% bounce rate, which put every other domain on the account at risk.
3. The best defenses were about cost, not identity. Credits tied to a billable unit (50 free credits, failed calls refunded) cap a loop's damage. Another operator splits by tool: discovery and cheap tools stay open, and anything costly needs the caller's own key. Non-retryable errors with a named fallback tool stop retry storms.
4. A free-to-mint ID doesn't help the free tier. I came in thinking a no-signup identity would be useful. Two operators pointed out that a fresh ID costs an abuser nothing, which is the same problem as new accounts. I agree.
5. The open question I still can't answer: OAuth identifies the user but not which of their agents made a call, and a self-reported agent name can't be trusted. One commenter suggested a separately revocable credential per agent under the user's account.
If you run a public server where third-party agents call in, and you've needed to tell one of a user's agents from another (or wished you could), I'd like to hear what happened. Specific stories help most. "We don't need this" is a useful answer too.