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
MCP server

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
All reasons and checks

rasinmuhammed/misata

Install

In your terminal, with SkillFoxx CLI

npx skillfoxx add mcp/misata

Detects the agents on your machine, shows the access level and pins the version.

Other ways to install

Access and checks

How we review

Extended 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.

A 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.

MCP serverExtended access81Repository stars
Official

An open-source agent for data engineers: a terminal SQL client with warehouse context, a semantic layer, REST and an MCP server.

CLIBroad access1.9KRepository stars
Official

The MCP server of the Duckle platform: an agent builds, checks and runs DuckDB ETL pipelines on your machine

MCP serverBroad access1.6KRepository stars
Official

A temporary DuckDB sandbox: an agent loads a CSV and queries the data over MCP or REST without touching the production database

MCP serverExtended access21Repository stars

DuckDB / MotherDuck MCP Server

DuckDB / MotherDuck Local MCP Server

Official

An MCP server for SQL analytics on DuckDB: local files, in-memory databases, S3-hosted databases and MotherDuck

MCP serverExtended access540Repository stars
Official

Malloy Publisher serves one data model to agents over MCP and to apps over REST, with queries in Malloy

MCP serverExtended access132Repository stars

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.

README badge

Report a problem