AI & agent workflows
An agent is only as correct
as the world you evaluate it against.
Most synthetic data tools generate plausible values, one column at a time. That is enough for a screenshot. It is not enough for an agent, because an agent does not read a screenshot, it follows a foreign key, sums a column, and acts on what it finds. If the data underneath it does not actually hold together, the agent fails the eval for a reason that has nothing to do with whether it was right.
What an agent actually needs from the data
Three things, and a plausible-rows generator gives you at most one of them.
Every foreign key an agent follows has to point somewhere real. Customers exist, orders belong to a real customer, refunds belong to a real order. One broken join and the agent's next step is undefined, not wrong, undefined.
To grade an agent's output you have to know what the correct answer was before it ran. Declare that 2.1% of transactions are fraudulent, or that 214 shipments breach the SLA, and you know exactly which rows a correct agent should surface.
The same seed produces the same world, byte for byte. Run the eval again next week, or against a different model, and the only thing that changed is the agent, not the ground it is standing on.
What teams reach for instead, and what it costs
Real customer records are the wrong thing to hand an autonomous agent regardless of masking, and most teams cannot clear the review to do it before the eval needs to run.
Fills each field with no idea what the neighbouring column, or the neighbouring table, says. An agent that joins orders to customers finds rows pointing at customers that do not exist, and the eval fails on a broken join, not on the agent's judgment.
Works for one scenario. The moment the eval needs a second scenario, a harder distribution, a different fraud rate, someone is editing JSON by hand and hoping the relationships still hold.
Produces plausible values with no guarantee of referential integrity past a few tables, and no way to reproduce the exact same starting state on the next run.
Or let the agent design the world itself
Misata ships an MCP server, so an agent in Claude Desktop, Cursor, Windsurf, Zed, or Continue can generate its own evaluation environment instead of you writing Python for it. The division of labour is deliberate: an agent is good at deciding what tables and columns a veterinary clinic or a logistics company actually needs. Misata is good at guaranteeing the math underneath that decision, referential integrity, exact aggregates, declared distributions, byte-identical reruns.
pip install "misata[mcp]" # then, in Claude / Cursor / Windsurf: "Generate a fintech fraud dataset with 10k customers and a 2% fraud rate."
Primary tool. The agent designs the schema dict; Misata returns CSVs plus an integrity proof: per-relationship orphan counts, exact roll-ups, the seed used.
Story-based generation from one sentence, Misata's own parser designs the schema.
See the domain, scale, and table layout Misata would produce, or the full schema as structured JSON, before generating a row.
Two-layer validation, structural and semantic, of a misata.yaml the agent or a human wrote.
Further reading
An agent can design a schema but cannot guarantee the math. What Misata’s MCP server actually returns, and why the integrity proof is the part that matters.
What happens to agent evaluation when the ground truth itself is wrong, and a construction where the answer key cannot disagree with the data.
Questions
What is synthetic data for AI agents?
Why can't an agent just use Faker-generated or column-independent data?
How do I get a reproducible starting state for an agent evaluation?
Can an AI agent generate its own test data?
How do I verify what an agent actually did, correctly?
Does this replace a real agent evaluation harness?
Misata is an open-source engine for generating relational data that satisfies declared outcomes exactly, MIT licensed, readable end to end. If you are building or evaluating agents against data and hitting a gap this page does not cover, tell us what it is. We would like to know.

