Inspiration
Every CAD package speaks a different dialect for the same five operations. ForgeMCP (my day-job product) already normalizes SolidWorks and Inventor behind one MCP tool vocabulary — but judges can't run SolidWorks, and neither can a Cloud Run job. So I built the missing backend: the same canonical tools on headless Blender, and put a real partner in front of it — one that reads your napkin sketch, remembers how thick you like your walls, and argues with the printability report on your behalf.
What it does
Tell it "a 3-inch flanged cap, 2 mm walls, PLA" — or hand it an annotated
sketch PNG. The intake agent (gemini-3.7-flash, multimodal) extracts a
spec in mm. The builder agent drives the Blender worker through the exact
ForgeMCP tool sequence (new_part → create_sketch → extrude → fillet_edges →
shell_part → export_stl). The printability agent reads a trimesh-based
report (watertight? thin walls? overhangs?) and either passes the part or
sends the builder back with a concrete revision — "re-shell at 3.0 mm" — for
at most two loops. Preferences stick: say "I always want 3 mm walls" once and
every future session builds that way (Firestore-backed memory).
How I built it
- Google ADK (
google-adk[mcp,gcp]), agent factories,gemini-3.7-flashfor intake/builder, fake-LLM scripted tests for the full loop with zero keys. - Blender worker: Python
bpyin Docker, MCP streamable HTTP, 12 tools mirroring the ForgeMCP canonical contract byte-for-byte at the schema level (verified by a contract test against the shipped gateway's tool inventory). EEVEE render with automatic CYCLES-CPU fallback headless. - Cloud Run both services; artifacts as GCS signed URLs; agent→worker authenticated with Cloud Run ID tokens; Firestore for preference memory.
Challenges
Headless Blender rendering (EEVEE wants a GPU context that containers don't have — hence the CYCLES fallback), and honoring a fixed mm/deg argument contract regardless of display units, exactly as the commercial CAD adapters do.
What's next for ForgeMCP-partner
This worker is the shape of ForgeMCP's planned Blender adapter — its alias
vocabulary (bevel→fillet_edges, solidify→shell_part) has been waiting
in the repo for it. The partner loop (build → check → revise) generalizes to
GD&T and manufacturability checks already shipped as ForgeMCP hosted tools.
Built With
- firestore
- gemini
- google-cloud
Log in or sign up for Devpost to join the conversation.