Peter Amiri
06/17/2026, 4:18 AMcli/lucli/Module.cfc -- its public functions become tools by reflection. No port, no socket, no running dev server. The AI editor spawns wheels mcp wheels and speaks JSON-RPC 2.0 over stdio.
What the post covers:
• The reflection model: the CLI is the MCP server -- no second surface to drift
• Setup with one .mcp.json snippet (no wheels mcp setup -- that command doesn't exist; wheels mcp just prints the config and writes nothing)
• The 18-tool surface and exactly why console, `start`/`stop`, new, and friends are excluded
• A worked example: shipping a commenting feature end-to-end through Claude Code -- generate, migrate, test
• The deprecated /wheels/mcp HTTP endpoint and why stdio replaced it
• A bit of template drift we found while writing the post (the OpenCode template still pointed at the old HTTP endpoint with a literal {PORT})
The tools advertise bare names -- generate, migrate, test, destroy. Clients namespace them under the server, so Claude Code shows them as mcp__wheels__generate.
<https://blog.wheels.dev/posts/wheels-claude-stdio-mcp>