www.youtube.com
Your MCP Server is Bad (and you should feel bad) | Jeremiah Lowin, AI Engineer Code Summit 2025
Excerpt
Jeremiah Lowin breaks down why most MCP servers miss the mark and what to do about it. As the creator of FastMCP, Jeremiah has seen every way people build MCP servers. Most of them aren't great. But here's the thing - it's not because people are bad at building. It's because we're designing for the wrong user. This talk is about agentic product design. Agents aren't humans. They're expensive at discovery, slow at iteration, and limited on context. So why are we building interfaces for them like they're just magical humans who can handle anything? Recorded at AI Engineer Code Summit 2025. ... … It enumerates every single tool and every single {ts:391} description on that server. So discovery is actually really expensive for agents. It consumes a lot of tokens. Um next {ts:398} iteration. Same idea. If you're a human developer and you're writing code against an API, you can iterate really … There's a big asterisk on that because {ts:574} client implementations in the MCP space right now are not amazing and they do some things that are themselves not {ts:579} compliant with the MCP spec. Maybe at the end we'll get into that. It's not directly relevant to now except {ts:586} that all we can do is try to build the best servers we can subject to the limitations of the clients that will use … {ts:938} the middle because they can do it but it's expensive and slow and annoying and hard to debug and stochcastic. And so if {ts:944} you can avoid that, please do. If you can't, there are times when you don't know the algorithm and you don't know {ts:949} how to write the code and it's not programmatic. … {ts:1167} but it's still going to be hard. There was until very recently there may still be a bug in maybe it's not a bug because {ts:1175} no one seems to fix it but in cloud desktop all um all structured arguments like object arguments would be sent as a {ts:1184} string and this created a real problem um because we do not want to support automatic string conversion to object … It gets what it sees as information about the fact that it didn't uh succeed in {ts:1466} what it was attempting to do. And so if you just allow Python in in fastmcp's case or whatever your tool of choice is {ts:1473} to raise for example an empty value error or a cryptic MCP error with an integer code that's the information that … {ts:1492} interesting strategies that I don't want to wholeheartedly endorse but I will mention where for example if you do have {ts:1497} a complex API because you can't get away from that. Then instead of documenting every possibility in the dock string {ts:1505} that that documents the entire tool you might actually document how to recover from the most common failures. … Who cares? One of the problems is that there are clients that are not compliant with the spec. Cloud Desktop {ts:1860} is one of them. I've mentioned it a few times. I have a history with Cloud Desktop. Um Cloud Desktop hashes all of {ts:1866} the tools it receives on the first contact and puts them in a SQLite database and it doesn't care what you
Related Pain Points
MCP clients not compliant with specification
8Multiple MCP client implementations do not properly implement the MCP spec, creating incompatibilities. CloudDesktop is cited as a specific example where structured arguments are sent as strings instead of objects, violating spec requirements.
CloudDesktop caches tool schemas without respecting updates
8CloudDesktop hashes all tools on first contact and stores them in SQLite, ignoring subsequent updates to tool definitions. This makes it impossible to iterate on tool schemas when CloudDesktop is the client.
Poor error handling and insufficient guardrails in AI agent frameworks
7AI agent frameworks lack clear error handling mechanisms and sufficient guardrails, leading to reliability issues and inconsistent performance. Many frameworks are still experimental and don't provide adequate controls for edge cases or failures.
Agent iteration is slow and expensive
7Agents cannot iterate quickly like human developers when writing code against an API. They are slow at iteration and have limited context, making debugging and rapid development cycles difficult.
API documentation lacks AI-readable semantic descriptions
6Most API documentation is written for human developers and lacks semantic descriptions needed for AI agents to understand intent. This documentation-understanding gap makes it difficult for LLMs to correctly interpret and use APIs.
Agent discovery is token-expensive
6MCP servers enumerate all tools and descriptions on first contact, consuming significant tokens during agent discovery. This makes it costly for agents to learn what tools are available compared to human developers.