Skip to content

fissible/seed

Repository files navigation

🌱 seed

Fake data for the rest of us.

A bash-first fake data generator — source it as a library, call it from the CLI, or wire it up as an MCP server so Claude can generate test data without spending tokens.

$ bash seed.sh user --count 3 --format json
{"name":"Amy Peterson","email":"amy.peterson@generated.io","phone":"941-212-9025","dob":"1992-12-22","username":"amy.peterson"}
{"name":"Joshua Campbell","email":"j.campbell@testmail.net","phone":"765-893-8309","dob":"1947-10-02","username":"joshua.campbell"}
{"name":"Angela Bell","email":"angela.bell@trial.co","phone":"752-176-9946","dob":"1952-05-14","username":"angela.bell"}

No runtime. No package manager. No dependencies beyond bash and awk.


What's in the box

37 generators across 8 categories, 4 output formats, an MCP server that turns Claude into a data factory, and a schema wizard to build custom .seed files.

Category Generators
Scalar name email phone uuid date number lorem ip url bool first_name last_name
Record user address company db_credentials
Ecommerce product category order order_item coupon cart
CRM contact lead deal activity note tag
Geo coordinates country
Finance credit_card
DevOps log_entry error_log api_key
TUI filenames dirtree menu_items

Install

git clone https://github.com/fissible/seed ~/lib/fissible/seed

That's it. No build step.


Usage

Library

Source seed.sh and call any seed_* function:

source ~/lib/fissible/seed/seed.sh

seed_name          # Patricia Torres
seed_email         # patricia.torres@fakecorp.dev
seed_uuid          # 4f9a1c2e-8b3d-47f0-a561-dc9e2b8f1034
seed_bool          # true

CLI

bash seed.sh <generator> [flags]

bash seed.sh name --count 5
bash seed.sh user --format json
bash seed.sh product --count 10 --format csv
bash seed.sh order --format sql --count 3
bash seed.sh filenames --count 20

Schema wizard

Generate a custom .seed file interactively:

$ bash seed.sh new custom-schema

Table name: app_users

Generators:
  1) first_name    2) last_name     3) name
  4) email         5) phone         6) uuid
  7) date          8) number        9) bool
 10) lorem        11) ip           12) url

Column name: id
Select generator [1-12, Enter to finish]: 6

Column name: email
Select generator [1-12, Enter to finish]: 4

Column name: age
Select generator [1-12, Enter to finish]: 8
  Min value [1]: 18
  Max value [100]: 80

Column name:
...
Written.

The wizard writes a tests/fixtures/app_users.seed file ready for use with seed_custom (coming soon).


Output formats

All record generators support --format json|kv|csv|sql. Default is JSON.

JSON (default)

$ bash seed.sh order
{"order_id":"27ba8115-eb1c-44a0-bbb9-a9681275bfba","customer_email":"andrew.henderson@samplelink.net","status":"cancelled","total":1951.20,"created_at":"2020-07-27"}

CSV

$ bash seed.sh user --count 3 --format csv
name,email,phone,dob,username
"Joshua Campbell","jeffrey.torres@testmail.net","765-893-8309","1947-10-02","joshua.campbell"
"Angela Bell","michael.jackson@trial.co","752-176-9946","1952-05-14","angela.bell"
"Patrick Martinez","mark.white@fakecorp.dev","796-750-6687","1977-04-20","patrick.martinez"

SQL

$ bash seed.sh order --format sql
INSERT INTO orders (order_id, customer_email, status, total, created_at) VALUES ('407c15a9-d62c-434f-90fb-5575d901de46', 'stephanie.russell@fakemailbox.net', 'shipped', 8154.95, '2009-02-15');

KV

$ bash seed.sh user --format kv
NAME="Amy Peterson"
EMAIL="amy.peterson@generated.io"
PHONE="941-212-9025"
DOB="1992-12-22"
USERNAME="amy.peterson"

Structured generators

seed_cart — nested JSON

$ bash seed.sh cart --items 2
{
  "cart_id": "a0abf54b-b3d5-46b8-a8c5-f8bd67ced3a1",
  "customer_email": "michelle.alexander@trial.co",
  "subtotal": 2626.93,
  "items": [
    {"order_id": "a0abf54b...", "product_sku": "WEE-20993", "qty": 9, "unit_price": 155.33, "line_total": 1397.97},
    {"order_id": "a0abf54b...", "product_sku": "QUI-21548", "qty": 4, "unit_price": 307.24, "line_total": 1228.96}
  ]
}

line_total is always qty × unit_price. subtotal is always the sum of line_totals. Math is real.

TUI helpers — plain text, one per line

$ bash seed.sh filenames --count 5
draft-widget-2019.csv
latest-dataset-2025.json
optimized-queue-2025.json
quick-block-2024.txt
old-detail-2020.txt

$ bash seed.sh dirtree --count 3
network/asset/log
client/dataset/node
quick/block/archive

$ bash seed.sh menu_items --count 4
Dynamic Widget
Latest Dataset
Optimized Queue
Quick Block

TUI generators don't support --format — they output plain lines, ready for your TUI list.


Flags

Flag Default Applies to
--count <n> 1 (TUI: 10) all generators
--format json|kv|csv|sql json record generators
--min <n> / --max <n> 1 / 100 seed_number
--from <date> / --to <date> 2000-01-01 / today seed_date
--words <n> seed_lorem
--sentences <n> seed_lorem
--items <n> 3 (max 10) seed_cart
--seed <n> all generators (reproducible output)
--prefix <str> sk_ seed_api_key

MCP server — for Claude Code

Wire seed up as an MCP tool so Claude can generate fake data on demand, without spending tokens inventing it.

Setup

1. Clone the repo (if you haven't):

git clone https://github.com/fissible/seed ~/lib/fissible/seed
pip3 install mcp

2. Add to your project's .mcp.json:

{
  "mcpServers": {
    "seed": {
      "command": "python3",
      "args": ["/path/to/fissible/seed/mcp/server.py"]
    }
  }
}

Replace /path/to/fissible/seed with your actual clone path (e.g. ~/lib/fissible/seed).

3. Restart Claude Code.

Claude will now have seed_name, seed_user, seed_product, and all other generators available as tools. When you ask for fake data, it calls the tools instead of hallucinating records — saving tokens and giving you consistent, realistic output.


Compatibility

  • Bash 3.2+ — works on macOS (native bash), Linux, Docker, WSL
  • No external deps — just bash, awk, od, and standard coreutils
  • MCP server — requires Python 3.x and pip3 install mcp

File map

seed/
├── seed.sh              ← entrypoint (library + CLI)
├── src/
│   ├── scalar.sh        ← name, email, uuid, date, number, lorem, ip, url, bool
│   ├── record.sh        ← user, address, company, db_credentials + format helpers
│   ├── ecommerce.sh     ← product, category, order, order_item, coupon, cart
│   ├── crm.sh           ← contact, lead, deal, activity, note, tag
│   ├── geo.sh           ← coordinates, country
│   ├── finance.sh       ← credit_card
│   ├── devops.sh        ← log_entry, error_log, api_key
│   ├── tui.sh           ← filenames, dirtree, menu_items
│   └── new.sh           ← seed new custom-schema wizard
├── data/                ← names, domains, cities, nouns, adjectives, lorem…
├── mcp/
│   ├── server.py        ← FastMCP adapter (one tool per generator)
│   └── requirements.txt
└── tests/
    ├── unit/            ← per-module bash tests (300 assertions)
    ├── fixtures/        ← .seed files for seed_custom (generated by wizard)
    ├── integration/     ← end-to-end CLI tests
    └── mcp/             ← Python unit tests for the MCP adapter

License

MIT — use it, fork it, embed it.

About

Fake data for the rest of us — bash-first generator with MCP server for Claude Code

Resources

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors