zod-contract-mock-forge-mcp
by vola-trebla
README.md
# zod-contract-mock-forge-mcp
[](https://www.npmjs.com/package/zod-contract-mock-forge-mcp)
[](https://www.npmjs.com/package/zod-contract-mock-forge-mcp)
[](https://github.com/vola-trebla/zod-contract-mock-forge-mcp/actions/workflows/ci.yml)
[](https://opensource.org/licenses/MIT)
An MCP server that turns Zod schemas into mocks, violations, and contract tests — so your AI agent can reason about API contracts without manually crafting payloads.
## The Problem
Zod schemas are runtime code. An AI agent cannot execute them, introspect their constraints, or generate valid/invalid payloads without this layer. The agent also cannot detect when the schema and the OpenAPI docs silently diverged, or whether a schema change breaks existing test fixtures.
## Tools
### Mock generation
| Tool | Arguments | What it returns |
| ------------------------ | -------------------------------- | ------------------------------------------------------------------------- |
| `generate_valid_mock` | `schema_code`, `count?` | Valid mock data matching the schema |
| `generate_mock_variants` | `schema_code`, `count?`, `seed?` | N structurally valid but value-diverse mocks — for property-based testing |
### Violation generation
| Tool | Arguments | What it returns |
| -------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------- |
| `generate_boundary_violations` | `schema_code` | Invalid payloads for each constraint: missing fields, type mismatches, min/max, email/uuid/url |
| `generate_exhaustive_union_violations` | `schema_code` | Per-variant violations for every branch of a `z.union()` or `z.discriminatedUnion()` |
### Schema analysis
| Tool | Arguments | What it returns |
| --------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `introspect_schema` | `schema_code` | JSON Schema representation — for LLM understanding of the contract |
| `read_schema_from_file` | `file_path`, `export_name?` | Extracts the Zod schema expression from a TypeScript/JS file |
| `detect_schema_drift` | `zod_file_path`, `schema_export_name`, `openapi_file_path`, `openapi_schema_name?` | Diffs Zod vs OpenAPI — reports `missing_in_openapi`, `missing_in_zod`, `type_conflict`, `required_mismatch` |
| `evaluate_schema_evolution` | `schema_file_path`, `schema_export_name`, `old_schema_content?` | Generates mocks from old schema, validates against new — detects breaking changes before tests run |
### Contract testing
| Tool | Arguments | What it returns |
| ---------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `scaffold_api_contract_test` | `framework`, `base_url`, `endpoint`, `method`, `schema_code`, `test_name?` | Contract test boilerplate for Playwright, Jest, Vitest, or MSW |
| `suggest_contract_fix` | `schema_code`, `payload` | Validates a JSON payload and explains each violation with a fix suggestion |
## Setup
### 1. Install
```bash
npm install -g zod-contract-mock-forge-mcp
```
### 2. Add to your editor
#### Cursor / VS Code (`.cursor/mcp.json` or `.vscode/mcp.json`)
```json
{
"mcpServers": {
"zod-forge": {
"command": "zod-contract-mock-forge-mcp"
}
}
}
```
#### Claude Code
```bash
claude mcp add zod-forge zod-contract-mock-forge-mcp
```
## Example usage
```
My schema file is src/schemas/user.ts, exported as UserSchema.
My OpenAPI spec is docs/openapi.yaml.
1. introspect_schema — what are the constraints on this schema?
2. generate_mock_variants — give me 10 diverse valid payloads (seed: 42) for CI reproducibility
3. generate_exhaustive_union_violations — test every branch of the role discriminated union
4. detect_schema_drift — has the Zod schema diverged from the OpenAPI docs?
5. evaluate_schema_evolution — does my schema change break any existing mock data?
```
## Example output
**`generate_mock_variants`** — 3 diverse valid mocks, seeded for CI:
```json
{
"schema_id": "schema_a1b2c3d4",
"count": 3,
"all_valid": true,
"variants": [
{ "name": "Colleen Rowe", "age": 37 },
{ "name": "Pat Reynolds", "age": 24 },
{ "name": "Veronica Konopelski", "age": 45 }
]
}
```
**`detect_schema_drift`** — field missing in OpenAPI, extra field in Zod:
```json
{
"drift_count": 2,
"drifts": [
{
"field_path": "role",
"drift_type": "missing_in_openapi",
"zod_value": "string",
"openapi_value": null
},
{
"field_path": "email",
"drift_type": "missing_in_zod",
"zod_value": null,
"openapi_value": "string"
}
]
}
```
**`evaluate_schema_evolution`** — new required field breaks existing mocks:
```json
{
"breaking_change": true,
"sample_count": 20,
"invalid_mock_count": 20,
"failure_reasons": [
{
"field_path": "status",
"zod_code": "invalid_type",
"expected": "string",
"received": "undefined",
"affected_mock_count": 20
}
]
}
```
## Scripts
```bash
npm run build # compile TypeScript → dist/
npm run lint # ESLint
npm run format # Prettier --write
npm run format:check # Prettier check (used in CI)
npm test # Vitest
```
## License
MIT
TDQS
A4.1/5.0
Scored across 10 tools
Disambiguation5/5
Each tool targets a distinct operation on Zod schemas: reading, introspecting, generating various mocks, testing, fixing, and comparing. No two tools have overlapping purposes.
Naming Consistency5/5
All tool names use a consistent verb_noun pattern in snake_case, making the set predictable and easy to navigate.
Tool Count5/5
With 10 tools, the server is well-scoped for its purpose—covering schema analysis, mock generation, testing, and validation without being overwhelming or sparse.
Completeness5/5
The tool set covers the full workflow: reading schemas, understanding their structure, generating valid/invalid mocks, creating tests, suggesting fixes, and tracking changes. No obvious gaps.
Maintenance
ActivityInactive
ResponsivenessUnresponsive