关于 Rowsmith test data
Rowsmith test data 是为开发与测试生成虚构数据的 MCP 服务,可按 schema 和 seed 输出 CSV、JSON 或 SQL。相同生成器版本下,相同请求和 seed 会产生字节一致的数据,标识符来自保留或无效范围。
主要功能
- 01按 schema 生成测试数据
- 02支持 CSV、JSON 和 SQL
- 03固定 seed 可复现输出
- 04生成刻意无效的测试值
- 05生成关联表与引用键
- 06提供不发生真实扣款的支付沙箱
适用场景
- 01为自动化测试生成稳定的订单数据
- 02为数据库测试构造关联表记录
- 03验证程序对无效输入的处理
- 04在不转移资金的沙箱中测试支付流程
MCP 相关
MCP 服务向客户端提供数据生成、列类型查询、无效值生成,以及可用时的支付沙箱工具。它是公共 Rowsmith API 的轻量客户端;生成结果支持固定 seed 和生成器版本以复现。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| rows | integer | 否 | 行数,1~500(既定值为 100) |
| seed | integer | 否 | 种子;对于相同的生成器版本,相同的表结构和种子会生成相同的输出(默认值为 1) |
| chaos | object | 否 | 用于测试错误处理的故意异常行为 |
| chaos.fail | string | 否 | 注入故障,例如 [email protected] |
| chaos.attempt | integer | 否 | 滚动计数器;每次重试时递增 |
| chaos.latency_ms | integer | 否 | |
| chaos.empty_result | boolean | 否 | |
| table | string | 否 | 表名,用于 SQL 输出(默认值为 data) |
| format | enum | 否 | 输出格式(默认值为 csv)csv | json | sql |
| columns | array | 是 | 表的列数,1~50 |
| overwrite | boolean | 否 | 如果 output_path 已存在,则替换它(默认值为 false) |
| output_path | string | 否 | 将数据写入此文件,而不是返回数据(行数超过约 50 行时使用)。必须位于工作目录内,或在设置 ROWSMITH_OUT_DIR 时位于该目录内;不得包含 '..' 路径段 |
详细介绍
rowsmith-mcp
升级后仍保持不变的固定测试数据:锁定输出版本,只要服务持续运行,Rowsmith 就会针对相同请求和种子返回相同字节;每次构建都会通过黄金测试进行验证。根据架构生成可通过种子复现的虚假测试数据。免费,无需密钥。支持 CSV、JSON 或 SQL,并提供供 Agent 使用的 MCP 服务。
curl -s https://testdata-api.re-jam620.workers.dev/v1/generate -H 'content-type: application/json' \
-d '{"rows":20,"seed":42,"format":"csv","columns":[{"name":"order_id","type":"sequence","prefix":"ord_","pad":4},{"name":"email","type":"email"},{"name":"total_usd","type":"decimal","min":1,"max":500}]}'
输出的前几行(20 行):
order_id,email,total_usd
ord_0001,[email protected],230.25
ord_0002,[email protected],17.04
适用于:pytest、Playwright、dbt、Postgres
正在比较工具?Rowsmith、Faker 还是 Mockaroo:该用哪个
一个用于 Rowsmith 的 MCP 服务:根据表架构生成虚假测试数据(CSV、JSON 或 SQL INSERT)。 它是公共 Rowsmith API 的轻量客户端,免费且有速率限制。
快速开始(60 秒)
- 将 Rowsmith 添加到 Claude Desktop、Cursor 或其他 MCP 客户端:
{"mcpServers":{"rowsmith":{"command":"npx","args":["-y","rowsmith-mcp"]}}} - 提问:“使用固定种子生成 20 条订单,并以 CSV 格式输出”
- 或直接调用 API:
Python 标准库中的 urllib 使用默认 User-Agent 发送请求时,会在请求到达 API 之前被 Cloudflare 拦截(403,错误代码 1010)。请设置自己的 User-Agent,例如curl -s https://testdata-api.re-jam620.workers.dev/v1/generate -H 'content-type: application/json' \ -d '{"rows":20,"seed":42,"format":"csv","columns":[{"name":"order_id","type":"sequence","prefix":"ord_","pad":4},{"name":"email","type":"email"},{"name":"total_usd","type":"decimal","min":1,"max":500}]}' curl -s 'https://testdata-api.re-jam620.workers.dev/v1/invalid?kind=email&count=5&seed=42' ID=$(curl -s https://testdata-api.re-jam620.workers.dev/v1/sandbox -H 'content-type: application/json' -d '{"seed":42}' | sed -E 's/.*"id":"([^"]+)".*/\1/') curl -s https://testdata-api.re-jam620.workers.dev/v1/sandbox/$ID/charges -H 'content-type: application/json' \ -d '{"amount":1999,"currency":"usd","card":"4242424242424242"}'User-Agent: my-tests/1.0。在我们于 2026-10-18 进行的测试中,requests、httpx、aiohttp、Node 和 curl 使用默认设置均可正常工作。
- 免费,有速率限制,无需账户或 API 密钥。
- 提供限制更高的付费计划(Pro、Team):https://testdata-api.re-jam620.workers.dev/pricing。免费套餐会继续提供。
- 相同的架构和种子,在相同的生成器版本下会生成逐字节一致的输出。
- 无效值目录会说明每个值无效的原因。
- 不会转移资金的支付沙盒:沙盒及其中的所有内容会在创建 1 小时后删除。它只接受 Stripe 公布的测试列表中的卡号,不会存储你发送的自由文本。
- 已列入官方 MCP Registry,名称为 io.github.meiorz/rowsmith。
这些数据是什么
- 不会使用任何真实人物的数据作为输入,也不会从真实人物生成任何记录。电子邮件、电话号码、 卡号、类似 SSN 和类似 IBAN 的值均仅来自保留范围或无效范围。
- 相同的架构和种子,在相同的生成器版本下(通过
x-generator-version发送)会生成逐字节一致的输出,因此测试固件可复现。 - 只发送架构。切勿发送真实数据。
工具
| 工具 | 功能 |
|---|---|
generate_test_data | columns(1-50)或 schema(JSON Schema 对象,或 {openapi, component}),可选的 rows(1-500)、seed、format(csv、json、sql)、table、output_path、overwrite、chaos;也可以用 tables 替代,用于一次调用生成相关表(见下文) |
list_column_types | 支持的列类型及其选项 |
invalid_values | 故意无效的测试数据值,并说明每个值无效的原因:kind(email、card、address、unicode、iban、ssn、all)、count、seed、fields、chaos |
sandbox_create(仅在服务声明提供沙盒时列出) | 创建支付沙盒(测试数据;创建 1 小时后删除):可选的 seed |
sandbox_payments(仅在服务声明提供沙盒时列出) | sandbox_id、action(charge、refund、list、get、reset)、amount、currency、card、charge、reference、limit、fields、chaos |
启动时,服务会读取一次 /pricing.json(超时 30 s,并在进程运行期间缓存),只有在服务声明提供 /v1/sandbox 时才会列出两个沙盒工具。如果该请求失败,沙盒工具将保持隐藏,服务的说明和 list_column_types 输出会说明原因;重启后可再次检查。工具定义大小以字符数衡量,即 tools/list JSON(名称、标题、描述和输入架构)的字符数除以 4:3 个工具约为 1370 个 token(5477 个字符);5 个工具约为 1978 个 token(7910 个字符)。使用 node scripts/tool-tokens.js 进行测量。
对于大约 50 行以上的数据,请传入 output_path:服务会写入文件并返回摘要(行数、字节数、sha256、标题行),而不是将数据放入模型上下文。文件只能写入指定的写入根目录:默认是服务的工作目录;设置 ROWSMITH_OUT_DIR 后则使用该目录(这会移动或收窄写入范围)。包含 .. 片段或位于根目录之外的路径会被拒绝,已有文件只有在设置 overwrite: true 时才会被替换。
除了 columns,generate_test_data 还接受 schema:一个 JSON Schema 对象(类型为 object 且带有 properties),例如 Pydantic(model_json_schema())或 Zod 导出对象;也可以是 OpenAPI 组件,例如 {"openapi": <document>, "component": "Order"}。服务会将其映射为列,并在结果末尾列出无法映射的属性(数组、模式和其他不支持的形式);不会进行任何猜测。发送前,服务会从架构中移除 example、examples、default、const 和 x-* 键,因此这些键的值不会离开你的机器,也不会出现在复现用的 curl 命令中;服务也会忽略这些值。对于 OpenAPI 组件,只会发送指定的组件及其引用的架构。映射说明见
https://testdata-api.re-jam620.workers.dev/openapi.json。
这些工具组成一条链,每个工具的描述都会说明接下来该用哪个:先用 generate_test_data(查询类型选项时搭配 list_column_types),然后用 invalid_values 获取代码应拒绝的值;如果列出了 sandbox_create 和 sandbox_payments,则接着用它们执行支付流程。
每个 generate_test_data 结果末尾都会附上一行复现命令:完整的 curl 命令,其中包含服务使用的 seed,并固定生成器版本,以便重新生成相同的字节。Chaos 选项不会包含在命令中。只要服务仍在运行,固定版本就会继续提供;已退役版本会返回 409。版本的输出不会被原地更改:每次构建时都会通过黄金测试检查其字节。对于返回数据的结果,复现命令上方会附带 Output sha256 <hex>,即数据字节的 sha256(服务的 X-Output-SHA256);使用 output_path 时,摘要中的 sha256 行就是该值。将其固定在黄金清单中,以检测偏移(格式见:https://testdata-api.re-jam620.workers.dev/llms.txt)。
chaos 会故意让服务出现异常,以测试错误处理:fail(例如 "[email protected]";也支持 500、503)、
latency_ms(最多 3000)、empty_result、attempt。结果由 seed 和 attempt 固定。
支付沙盒是一个虚假的银行卡处理器:不会转移任何资金,也不会联系任何支付服务提供商。它只接受 Stripe 公布的测试列表中的卡号(4242424242424242 会成功;invalid_values 中 kind
为 card 时会列出被拒绝的卡号及其代码),并会拒绝任何字段中其他类似银行卡号的数字。每个对象都会标记为 "livemode": false、"sandbox": true 和 TEST DATA。
列类型:uuid、sequence、integer、decimal、boolean、enum、date、datetime、first_name、
last_name、full_name、email、phone、test_card、ssn_invalid、iban_invalid、text。
使用
{
"mcpServers": {
"rowsmith": {
"command": "npx",
"args": ["-y", "rowsmith-mcp"],
"env": { "ROWSMITH_OUT_DIR": "/path/to/your/project/fixtures" }
}
}
}
ROWSMITH_OUT_DIR 是可选的。不设置时,文件只能写入服务运行所在的目录;设置该变量可指定文件夹,例如项目的 fixtures 目录。
调用示例:
{ "rows": 3, "seed": 42, "format": "csv",
"columns": [ { "name": "order_id", "type": "sequence", "prefix": "ord_", "pad": 4 },
{ "name": "email", "type": "email" },
{ "name": "total_usd", "type": "decimal", "min": 1, "max": 500 } ] }
在一次调用中生成相关表:传入 tables 而不是 columns(它会调用 POST /v1/dataset)。列
{"name": "customer_id", "type": "ref", "table": "customers", "column": "id"} 会从同一次调用中较早生成的表的主键获取值,因此键值一致;引用仅在请求内解析,不会存储任何内容。format 可以是 sql(CREATE TABLE 和 INSERT 语句)或 json;最多 10 张表,总计 500 行。
使用 PostgreSQL 和 SQLite 3.23 或更高版本通用的方言编写;CI 会在启用外键约束的 SQLite 和 PostgreSQL 16 中执行。结果会添加 Rows sha256 per table;同一请求的 SQL 和 JSON 形式具有相同的值,复现用的 curl 命令也会固定数据集版本。调用示例(工具参数):
{"seed":42,"format":"sql","tables":[{"name":"customers","rows":3,"columns":[{"name":"id","type":"uuid"},{"name":"email","type":"email"}]},{"name":"orders","rows":5,"columns":[{"name":"id","type":"sequence"},{"name":"customer_id","type":"ref","table":"customers","column":"id"},{"name":"total","type":"decimal","min":5,"max":500}]}]}
GitHub Action:在 CI 中生成 fixtures
fixtures/action.yml 是一个组合式 Action,只需调用一次 /v1/generate 即可写入 fixture 文件。输入项:
schema(包含 columns 数组或完整请求的 JSON 文件路径)、out(要写入的文件),以及可选的
seed、rows 和 format(csv、json 或 sql);提供这些值时,会替换文件中的对应值。任何非 200 响应都会使步骤失败,并显示服务的错误及其 next 步骤。不会缓存任何内容,也无需密钥。
使用标签 meiorz/rowsmith-mcp/[email protected](或使用 @main 尝试最新版本)。
name: fixtures
on: [push]
jobs:
fixtures:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: meiorz/rowsmith-mcp/[email protected]
with:
schema: test/fixtures/orders.schema.json
seed: "42"
rows: "200"
format: csv
out: test/fixtures/orders.csv
- run: npm test
配合 test/fixtures/orders.schema.json:
[{ "name": "order_id", "type": "sequence", "prefix": "ord_", "pad": 4 },
{ "name": "email", "type": "email" },
{ "name": "total_usd", "type": "decimal", "min": 1, "max": 500 }]
相同的 schema 和 seed 在生成器版本相同时会产生字节完全相同的输出,因此在生成器版本更改之前,每次运行生成的文件都相同。步骤的 generator-version 输出会报告所用版本。每次运行都会计入运行器地址的每日限额。GitHub 托管的运行器共用地址,因此其他用户的运行可能会耗尽限额。
可选的 extra-header(自 v0.2.3 起提供;v0.2.2 中没有)会添加一个请求标头,格式为可打印 ASCII 字符组成的 Name: value。默认值为空,即不发送额外标头。
.github/workflows/canary.yml 是我们的每小时运行时间检查:它会发送固定的 canary 请求(黄金请求,正文恰好为这些字节),并附带 x-rowsmith-canary: 1;除非响应的 sha256 为
50db558e2e8c54353ac38a3125deb91642895db302eec334afeec2406537f821,否则检查会失败。服务仅在请求带有该标头且正文完全匹配时,才会将调用视为 canary;其他任何带有该标头的调用都属于普通调用。该工作流还会使用 Python 的 urllib 默认 User-Agent 进行探测(普通调用,不带 canary 标头),并将结果(被拦截或通过)写入作业摘要,但不会因此使作业失败。
限制和条款
每次调用最多支持 500 行和 50 列,并且每个调用方有每日限额;超过限额时,工具会返回包含重试时间的服务 429 消息。调用会在 30 s 后超时。服务端不保存任何密钥,除非你传入 output_path,否则不会写入任何内容。调用会发送至 https://testdata-api.re-jam620.workers.dev(可通过 ROWSMITH_URL 覆盖)。
MIT 许可仅适用于此封装的代码。Rowsmith 服务的使用仍受其使用条款约束,运行 Agent 的人须遵守这些条款。
使用条款:https://testdata-api.re-jam620.workers.dev/terms · 数据声明: https://testdata-api.re-jam620.workers.dev/privacy · 发布者:meiorz · 联系方式:[email protected]
隐私、数据和删除请求:仅发送至 [email protected],切勿在公开议题中提出。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。