General-purpose models hallucinate CDS: annotation terms that don't exist, OData v2 syntax mixed into v4, invented fields. CAPforge connects your agent (Claude Code, Cursor…) to the real compiler and SAP's official best practices — and doesn't let it stop until the code compiles.
The real loop: generate → compile → correct → green. No babysitting.
The problem
There's barely any public CAP code in training data. The result: your copilot nails React on the first try, but with CAP it enters the "doesn't compile → fix it → still broken" loop. You pay the API either way — and get scrap. And what does compile often doesn't fit your project: invented entities, ignored catalogs, your conventions nowhere to be seen.
The solution
How it works
.mcp.json, command npx -y capforge.Uncomfortable questions
Every failed iteration gets billed the same: you pay tokens for code that doesn't compile. CAPforge doesn't replace your AI — it makes the one you already pay for get it right and prove it, by running the real compiler in the loop. Fewer iterations, fewer tokens, less supervising.
Generic syntax — yes, they'll improve. But two things are never in any training data: your project's model and conventions, and the result of running your toolchain on what the AI just wrote. Retrieval and generation get better; verification still needs the compiler in the loop.
Joule lives inside SAP Build's closed ecosystem, with its licensing and its pace. CAPforge works in the tools your team already uses and loves — Claude Code, Cursor, VS Code — with whatever model you choose. It complements rather than competes: we're the small, open, sharp piece.
No. CAPforge runs locally as an MCP server. It calls no LLM and sends nothing anywhere: your agent brings the model (your key, your data agreement) and CAPforge contributes knowledge and validation on your disk.
Get started