zod-contract-mock-forge-mcp

Gera mocks determinísticos e violações de limites a partir de esquemas Zod.

Documentação

zod-contract-mock-forge-mcp

npm version npm downloads CI License: MIT

Um servidor MCP que transforma esquemas Zod em mocks, violações e testes de contrato — para que seu agente de IA possa raciocinar sobre contratos de API sem precisar criar payloads manualmente.

O Problema

Esquemas Zod são código em tempo de execução. Um agente de IA não consegue executá-los, inspecionar suas restrições ou gerar payloads válidos/inválidos sem esta camada. O agente também não consegue detectar quando o esquema e a documentação OpenAPI divergiram silenciosamente, ou se uma alteração no esquema quebra fixtures de teste existentes.

Ferramentas

Geração de mocks

FerramentaArgumentosO que retorna
generate_valid_mockschema_code, count?Dados mock válidos que correspondem ao esquema
generate_mock_variantsschema_code, count?, seed?N mocks estruturalmente válidos, mas com valores diversos — para testes baseados em propriedades

Geração de violações

FerramentaArgumentosO que retorna
generate_boundary_violationsschema_codePayloads inválidos para cada restrição: campos ausentes, incompatibilidades de tipo, min/max, email/uuid/url
generate_exhaustive_union_violationsschema_codeViolações por variante para cada ramo de um z.union() ou z.discriminatedUnion()

Análise de esquema

FerramentaArgumentosO que retorna
introspect_schemaschema_codeRepresentação JSON Schema — para compreensão do contrato pelo LLM
read_schema_from_filefile_path, export_name?Extrai a expressão do esquema Zod de um arquivo TypeScript/JS
detect_schema_driftzod_file_path, schema_export_name, openapi_file_path, openapi_schema_name?Compara Zod vs OpenAPI — relata missing_in_openapi, missing_in_zod, type_conflict, required_mismatch
evaluate_schema_evolutionschema_file_path, schema_export_name, old_schema_content?Gera mocks a partir do esquema antigo, valida contra o novo — detecta mudanças que quebram antes da execução dos testes

Testes de contrato

FerramentaArgumentosO que retorna
scaffold_api_contract_testframework, base_url, endpoint, method, schema_code, test_name?Código-base de teste de contrato para Playwright, Jest, Vitest ou MSW
suggest_contract_fixschema_code, payloadValida um payload JSON e explica cada violação com uma sugestão de correção

Configuração

1. Instalação

npm install -g zod-contract-mock-forge-mcp

2. Adicione ao seu editor

Cursor / VS Code (.cursor/mcp.json ou .vscode/mcp.json)

{
  "mcpServers": {
    "zod-forge": {
      "command": "zod-contract-mock-forge-mcp"
    }
  }
}

Claude Code

claude mcp add zod-forge zod-contract-mock-forge-mcp

Exemplo de uso

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?

Exemplo de saída

generate_mock_variants — 3 mocks válidos diversos, com seed para CI:

{
  "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 — campo ausente no OpenAPI, campo extra no Zod:

{
  "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 — novo campo obrigatório quebra mocks existentes:

{
  "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

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

Licença

MIT