I've spent the last few years watching developers build incredible MCP servers, only to watch them fall apart in production because of something fundamentally stupid: bad instructions.

You build a sophisticated integration—maybe it connects to a legacy CRM or a complex billing API. You handle the auth, you manage the sandboxing via V8, you've got your TypeScript types perfectly mapped. Then, at the finish line, you write a tool description that sounds 'nice.' Something like: "This tool allows you to fetch user information from our database and will return the details as a string."

And then, when you drop it into Claude Desktop or Cursor, the agent starts hallucinating. It tries to pass user_id when you named the parameter userId. It forgets that the output is a string because you didn't explicitly state the return type in an actionable way. It gets lost in the 'fluff.'

The problem isn't your LLM. The problem is that you are writing for humans, but these tools are being consumed by agents. Agents don't need politeness; they need semantic density.

The Semantic Density Problem