Every tool you expose over MCP ships its full definition (name, description, JSON schema) into the model's context on every single request, whether that tool ever gets called or not. Expose twenty tools and the agent wades through pages of boilerplate before it has read one of your notes.
That cost shaped the best decision I made building an MCP server in the open this week, and it isn't a feature. It's a split: tools are for acting, resources are for reading. Most MCP servers I've looked at ignore that line and expose everything as a tool. I think that's a mistake. Here's why.
The hidden cost of a tool
Sit with what that per-request tax actually buys you: nothing, most of the time. A note server that exposes "read this note," "list those notes," "get this document," "fetch that attachment" as four separate tools pays for all four on every turn, including the turns that only write. It's quietly burning your context window on plumbing.
MCP already gives you a better primitive for exactly this. It's called a resource.






