MCP server live on SmitheryPython · MIT · zero API keys

Synthetic data with
a proof attached.

Every other tool copies a real dataset and hopes the copy holds up. Misata works the other way around. You state the outcome your data has to show, a revenue line climbing to $200k, a 2% fraud rate, a December spike, and a deterministic engine builds relational data that lands on it exactly, then hands you the proof. Use it as a no‑code studio or a Python library. No real data, no model, no API key.

View on GitHubpip install misata

Prefer not to write code? The same engine powers Misata Studio, a no-code app for building believable datasets in the browser. The math below is formalized in an arXiv paper.

misata · pythonrunning
How it works
Declare
Describe the world you need
Write a sentence, sketch a schema on the canvas, or let your AI agent send one over. Growth curves, fraud rates, seasonality: you set them as targets, and the engine treats them as law.
Generate
The math engine fills it in
Seeded, vectorized NumPy does the heavy lifting. Names match genders, appointments land on 15-minute grids, categories follow Zipf's law, and the distance from Chicago to San Diego is the real one. No API key. No model call.
Verify
Get a proof, not a promise
Every run ships an integrity report: foreign keys checked, roll-ups reconciled, declared curves matched. Run the GROUP BY yourself. The totals add up.
What Misata does

The synthetic data engine
built like an instrument.

Traditional synthetic data is built by imitation. Train a model on a real dataset, sample from it, and hope the copy holds up. That needs real data to start, leaks its statistics, and still misses the numbers you actually care about. Misata inverts the problem. You declare what has to be true, the aggregates, the rates, the relationships, and a constraint engine, an outcome solver, and a realism core make it true. Same input, same output, every run. No real data, no model, no API key.

Exact outcome curves
Draw revenue climbing from $50k to $200k and the generated rows sum to it exactly. Closed-form sampling, no rejection loops, formalized in our arXiv paper. The imitation synthesizers we benchmarked miss declared aggregates by 74 to 86 percent.
Relational data that reconciles
Parents come before children and every foreign key resolves. Roll-ups survive a real JOIN: a customer's total_spent equals the sum of their orders, a project's revenue equals the sum of its billed timesheets.
Realism that survives inspection
Names match genders across 11 cultures. Appointments land where a calendar would put them. Categories follow Zipf's law, city distances check out on a map, and reviews agree with their star ratings. Each classic tell of fake data has a mechanism built to kill it.
Unknown domains, composed honestly
A story outside the built-in domains gets a structural schema composed from its own entities. Misata wires up the tables and keys but never invents semantics, and it tells you exactly what it inferred.
Capsules: domain knowledge as a file
Mine vocabulary from your CSVs, or have an LLM write it once, into a single JSON file you can share. From then on generation is deterministic and free. Your domain's terms, no model in the loop.
Deterministic and auditable
Same seed, same dataset, byte for byte, on your laptop or in CI. The engine is MIT licensed, so the math your data came from is math you can actually read.
Who uses Misata

One engine for every place
you need data that is not real.

Synthetic data is not one job. A data engineer testing a Spark pipeline, a QA team seeding CI, a sales engineer staging a demo, and an ML team bootstrapping a model all need the same thing from different angles: realistic, relational, fully controllable data that owes nothing to a production system. Misata serves all of them from a single specification.

Data engineering
Test pipelines before the data lands

You are building a Bronze to Silver to Gold pipeline and cannot copy production into a dev workspace. Misata generates the full multi-table source, every foreign key intact, so your joins, dedupes, and aggregations run against data shaped like the real thing. Declare a fraud rate or a revenue curve up front and your Gold layer has a known ground truth to assert against. Inside a dbt project, one bare command reads your own schema.yml, turns your relationships and accepted_values tests into the generation contract, and dbt build passes on day zero. Writes straight to Delta Lake on Databricks and Spark with one call.

dbt build passes on day zeroDelta and Parquet outputForeign keys that survive a JOIN
QA and test engineering
Integration fixtures that do not lie

A Faker loop gives you one fake row at a time and orphan keys that break the first JOIN in your suite. Misata seeds an entire relational fixture with referential integrity proven per relationship, the same seed producing byte-identical data every run. Wire it into CI as a pytest fixture or a database seed and stop maintaining brittle SQL dumps.

Deterministic CI seed datapytest fixturesEdge cases on demand
Demos and sales engineering
Demo data that looks like a real account

Generic placeholder data kills a demo. Misata produces names that match cultures and genders, prices that follow real distributions, timestamps that fall in business hours, and revenue that climbs the curve your story needs. No customer PII, no scrubbing, no legal review. Build a believable sandbox for every prospect and reset it in seconds.

No PII, no scrubbingOn-brand numbersReset and reshape instantly
Machine learning
Training data for a cold start

When you have no labeled data yet, or cannot move the data you have, Misata builds a training set from a specification. Set class balance and incidence rates exactly, inject realistic missingness and outliers, and control correlations between features. Useful for bootstrapping a model, stress testing a class imbalance, or augmenting a thin minority class.

Exact class balanceControlled correlationsMAR and MNAR missingness
Analytics and BI
Build the dashboard before the warehouse fills

Ship the BI layer in parallel with ingestion. Misata generates analytics-shaped data, sessions, events, funnels, and conversions, with the seasonality and growth your charts should show. Validate a dashboard, a metric definition, or a semantic model against data that behaves like your domain instead of random noise.

Funnels and sessionsSeasonality and trendsRealistic cardinalities
Startups and developers
Seed dev and staging in one command

Fill a local Postgres, a staging environment, or a prototype with data that makes the product feel alive. Describe the schema in plain English, a YAML file, a Prisma schema, or point Misata at your existing database, and get thousands of coherent rows with working relationships. No production access required, no data ever leaves your machine.

Postgres, MySQL, SQLitePrisma and SQL importRuns fully offline
Built for AI agents

Your agent designs the schema.
Misata guarantees the math.

LLMs are excellent at deciding what a dataset should look like and terrible at generating ten thousand rows of it. Misata’s MCP server splits the work along that line. The agent sends a schema dict with tables, distributions, formulas, and outcome curves. It gets back generated files and an integrity proof it can show its user.

Use it on Smithery, no installor pip install "misata[mcp]" to run it locally
  • Tools to generate from a story or a schema dict, plus ready-made schema prompts for longitudinal, transactional, marketplace, and hierarchical data, for any domain.
  • Every response carries integrity.verified with orphan counts per relationship. The agent never has to claim correctness it can’t check.
  • Generation burns zero tokens. The agent spends its context on design; the deterministic engine does the volume.
mcp config · claude / cursor / windsurfon smithery
# hosted: zero install, one-click on Smithery
# or run locally:
pip install "misata[mcp]"

{
  "mcpServers": {
    "misata": { "command": "misata-mcp" }
  }
}

// agent → misata
generate_from_schema({ schema, rows, seed })

// misata → agent
{
  "ok": true,
  "files": ["customers.csv", "orders.csv"],
  "integrity": {
    "verified": true,
    "relationships": [
      { "relationship":
          "orders.customer_id → customers.customer_id",
        "intact": true, "orphans": 0 }
    ]
  }
}
Five lines

From prose to a full,
linked dataset.

No config files. No real data for warm-up. No API key. Describe the world, call generate, then assert the properties you declared. They hold.

Open Studio
quickstart.py
import misata

tables = misata.generate(
    "A fintech with 2,000 customers, checking and savings "
    "accounts, and 20,000 transactions including a 2% fraud rate.",
    seed=42,
)

customers    = tables["customers"]      # 2,000 rows
accounts     = tables["accounts"]       # ~4,000 rows
transactions = tables["transactions"]   # ~20,000 rows

# Declared properties hold. Assert them.
assert (~transactions["account_id"]
          .isin(accounts["account_id"])).sum() == 0   # 0 orphans
assert abs(transactions["is_fraud"].mean() - 0.02) < 0.005

# Same seed → same bytes, on any machine
pd.testing.assert_frame_equal(
    customers, misata.generate(..., seed=42)["customers"])
Questions

Synthetic data,
answered plainly.

Describe the schema you need in plain English, a YAML file, a Prisma schema, or by pointing Misata at an existing database structure. Misata generates relational rows from that specification alone. No production export, no real data, and nothing ever leaves your machine. Foreign keys resolve, totals reconcile, and the same seed reproduces the same dataset every time.

Synthetic data by domain

Every domain has its own tables, relationships, and outcomes to control. See exactly what Misata generates for yours.

How Misata compares

Choosing a synthetic data tool comes down to whether you have real data to imitate or a dataset to specify. Here is the honest breakdown.

Studio · Public beta

Start building
with Misata now.

After a long stretch of closed development, Studio is now open as a public beta. Domains, value generation, and features will grow based on what you actually try to build. Try it, find the edges, and tell us what to improve.