Strata runs on your machine, against your code. It reads your schema, composes the modules your task actually needs, writes real files into your repo, and generates one command that proves the result works.
So Strata registers exactly one, and it does the whole job.
Reads the project, selects the modules the task actually needs, composes them in the correct order, writes the files, and generates the verifier. One call. It reports which files it created and which it modified.
// the model calls strata_use once { "tool": "strata_use", "arguments": { "dir": "/Users/you/shop-api", "task": "product search API", "capabilities": [ "full-text search with facets and typeahead", "cursor pagination with sorting", "request body validation with per-field errors", "structured logging with a correlation id", "token-bucket rate limiting" ] } } // Strata writes the files and says exactly what it touched FILES CREATED strata/lib.js — the implementation these import from strata/verify.js — boots the app, exercises every requirement FILES MODIFIED — these already existed and Strata edited them: src/server.js package.json Review the diff. If the edit is wrong for this project, change or revert it. // then: node strata/verify.js PASS /products walks pages by cursor without repeating a row PASS a hostile search query does not 500 PASS a burst past capacity yields 429 + Retry-After 15/15 checks passed — the delivered feature works end to end.
There is no model in this pipeline. Nothing is generated on the fly, so nothing can be hallucinated — and there is no key to buy.
Strata finds your schema — Prisma, Mongoose, Drizzle, TypeORM, Sequelize or plain JS — and extracts your real entity: fields, types, enums, and the actual ID column. Relations are detected and excluded, because you cannot sort a list by an object. If it cannot identify the entity with confidence, it says so and leaves a slot rather than guessing.
Each phrase is scored against the library, and anything that merely shares vocabulary with your task gets thrown out. If fewer than two modules survive, Strata declines and tells you to write it yourself — at one module, that is genuinely the cheaper path.
Modules do not own your app — they add to it, in a fixed order. Logging mounts above body parsing, because a malformed request throws while being parsed: get that backwards and the one request you most want to trace is the one that loses its id. You never have to think about it.
Strata writes strata/verify.js, built against your entity — your fields, your routes, your ID column. It runs the modules' own suites, boots the app, and exercises every requirement against a live server. Running it is the fastest way to find out whether any of this is wrong.
In .mcp.json (Claude Code, Cursor, VS Code) or claude_desktop_config.json (Claude Desktop). No API key, no account.
It discovers a single tool, strata_use. There is nothing else to learn.
Then run node strata/verify.js and watch it prove itself. If Strata declines, believe it — write that one by hand.
{
"mcpServers": {
"strata": {
"command": "npx",
"args": ["-y", "stratalib"]
}
}
}