I Almost Hand-Rolled JSON-RPC for an MCP Server. Eight Tools Later I'm Glad I Didn't. A developer building an MCP server that combines GitHub and DEV.to APIs chose FastMCP's decorator API over the low-level JSON-RPC protocol. With eight tools, the decorator approach eliminated boilerplate like schema blocks and dispatcher chains, deriving schemas from Python type hints and docstrings. The developer notes that while the low-level API is necessary for protocol-level control, it adds unnecessary complexity for wrapping REST APIs. When I built the MCP server for this project — it combines GitHub and DEV.to into a set of tools an agent can call — I had a decision to make before writing a single tool: talk to the low-level MCP protocol directly, or use FastMCP 's decorator API. I've seen a few "your first MCP server" writeups lately walk through the low-level path because it's more "honest" about what MCP actually is under the hood — JSON-RPC over stdio, a capabilities handshake, typed request/response schemas. That's true, and it's a reasonable thing to want to understand. But I want to write about the other side: what it actually costs you in practice once you have more than one or two tools, because I went through both and the difference showed up fast. Strip away the decorator and MCP is a JSON-RPC server. For every tool you add, you're responsible for: list tools handler call tool dispatcher that matches on tool name and unpacks arguments by hand TextContent / ImageContent wrapper types MCP expectsNone of that is hard in isolation. The problem is it's boilerplate that scales linearly with tool count and has zero connection to the actual logic of the tool. My server has 8 tools. Hand-rolled, that's 8 schema blocks plus a dispatcher if/elif chain plus 8 response-wrapping calls, all of which exist purely to satisfy the protocol, not to do anything a GitHub or DEV.to API call needs. Here's an actual tool from server.py , unedited: php @mcp.tool def get repo stats repo: str - dict: """Get stars, forks, watchers, open issues for enjoykumawat/