Misata: synthetic data with proof
Misata
A Python synthetic data generator: you declare the facts a dataset must hold, Misata builds the tables and DuckDB verifies them
- 77 ★ on the repository
- Last commit
Extended access
Why this level
- The `seed_database` tool writes generated data into the database the agent connects to
- Generation writes files to the chosen folder on disk
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add mcp/misataDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- The `seed_database` tool writes generated data into the database the agent connects to
- Generation writes files to the chosen folder on disk
This is third-party code. Review the repository files before installing.
What it does
Misata builds multi-table test data from a declaration. YAML states the facts: revenue by month, channel shares, balanced ledgers, foreign keys, lifecycles. The engine builds rows so that all facts hold at once, and if they contradict each other it refuses with the arithmetic and a suggested fix. After generation DuckDB re-checks the files on disk and writes a certificate: `misata generate -c misata.yaml -o data --attest`, then `python data/verify.py` shows how many invariants hold. One cent changed in a row shows up as a failed check. Output goes to CSV, Parquet, JSONL, DuckDB and Postgres. The `misata-mcp` server gives an agent 15 tools: `generate_from_schema`, `explain_schema`, `validate_yaml`, `seed_database`, `create_sandbox`, `query_sandbox`, `attest_dataset`, `audit_dataset` and others. The agent designs the schema, Misata does the arithmetic and DuckDB checks it.
Who it is for. Analysts and data engineers who need test tables with a known answer to check dbt models, Spark jobs and dashboards.
Good fit when
- You need a fixture for a dbt model where January revenue is known to be 180,000
- A dashboard is checked on data where channel shares are fixed in advance and hold in every month
- CI keeps a generated set in git with its fingerprint: the same seed and version give the same bytes
- An agent is asked to fill a test database with data that has valid foreign keys
Not a fit when
- You need a statistical twin of a private table: Misata imitates nothing unless asked
- Arbitrary SQL with window functions is under test: you write the expected output yourself
- The data must follow languages and currencies outside the English, US-leaning default priors
Example request
Generate customer and order tables for 2025 where revenue grows from 180,000 in January to 310,000 in December and verify the certificate.MCP
- Transport
- stdio
- Authentication
- not required
Limitations
Precision is guaranteed only for what can be declared: sums, shares, roll-ups, ledgers, keys and lifecycles. For arbitrary SQL the engine gives consistent inputs and the expected output stays with you. The `mimic` mode fits to real rows and does not anonymize them.
Priors are English-first and US-leaning, especially on money, and shares round to whole rows. Verification needs `duckdb`: install with `pip install "misata[duckdb]"`, and the `[mcp]` extra for the MCP server. The full list of limits is kept in LIMITATIONS.md and wins over the rest of the documentation.
How to disable. Run `claude mcp remove misata` and, if needed, `pip uninstall misata`. Generated files stay in the chosen folder and are deleted by hand.
FAQ
How do I install Misata as an MCP server in Claude Code?
With `claude mcp add misata -- uvx --from "misata[mcp]" misata-mcp`. For Cursor, Windsurf and Claude Desktop there is `misata mcp install --client all`.
How is Misata different from Faker?
Faker emits random values, while Misata fulfils the declared facts and proves it with a certificate that DuckDB checks.
What happens if the facts contradict each other?
Generation stops with exit code 3 and writes nothing. The error names each declaration and shows the arithmetic.
Is the result identical across systems?
Yes, the same file, seed and version give the same bytes on Linux, macOS and Windows.
Which formats does Misata write to?
CSV, Parquet, JSONL, DuckDB and Postgres; certificate verification needs only the Python standard library and `duckdb`.
Discussion
No questions or reviews yet.
Related
MCP serversA text-to-SQL MCP server: an agent asks a database in words, gets SQL plus a trace, and a stated refusal when data is missing.
An open-source agent for data engineers: a terminal SQL client with warehouse context, a semantic layer, REST and an MCP server.
The MCP server of the Duckle platform: an agent builds, checks and runs DuckDB ETL pipelines on your machine
A temporary DuckDB sandbox: an agent loads a CSV and queries the data over MCP or REST without touching the production database
DuckDB / MotherDuck MCP Server
DuckDB / MotherDuck Local MCP Server
An MCP server for SQL analytics on DuckDB: local files, in-memory databases, S3-hosted databases and MotherDuck
Malloy Publisher serves one data model to agents over MCP and to apps over REST, with queries in Malloy
README in short
The README shows a quick YAML example with verification, explains the declarative approach, compares it with Faker and SDV and lists the 15 MCP tools. The limits live in a separate LIMITATIONS.md.