# create_tests_from_spec

Compile a hand-edited functional-requirements spec (.3tg.md) into actual Jest/Vitest tests. This is "Flow B" — the user has already authored or reviewed the .3tg.md and is ready to materialise the rows into a runnable test file. Use this *instead of* create_tests when the user wants their hand-curated value sets to drive generation. Inputs: the source code plus the spec content (the spec lives at .3tg/<sourceDir>/<basename>.3tg.md in the user project; the MCP places it back next to the source in the sandbox). AI enrichment is NOT run — the spec is authoritative. 3TG also writes a <basename>.md.3tg.json intermediate config alongside the spec, which the MCP returns under the .3tg/ mirror so the user can inspect what the spec compiled to. Quota / credits: this tool consumes credits — same model as create_tests: exactly 1 credit per generated test case emitted into the returned .test.ts / .test.tsx. The number of rows in your .3tg.md table is therefore a reliable upper bound on what the call will cost. Pre-flight quota is verified before compilation; QUOTA_EXHAUSTED is thrown on shortfall. Flow B cliConfig caveat — spec-authoritative keys are STRIPPED. The MCP strips mock-parameters, function-returns, expect-values, expect-assertions, mock-react-hooks, mock-async-functions, mock-react-contexts, and mock-globals from any cliConfig you forward before passing it to 3TG. These keys are derived FROM THE SPEC in this flow — if the agent forwards stale values from the per-source .md.3tg.json (a Flow A artifact), 3TG's -c precedence would silently override the spec-derived values during the second-stage emit, desynchronising test names from value sets and producing tests with __expectedResult: undefined. For Flow B, forward ONLY global/structural config keys (rules.*, creationMode, mockAsFunction, no-rule-default-true, ignore, package.json.type, …) — the spec owns the test-value plan. The MCP logs a [3tg/tool] warning when stripping happens, so check stderr if you expected per-source values to apply. CRITICAL POST-CALL ACTION — write returned files to disk: The MCP server does NOT touch the user's filesystem. It returns the generated file CONTENTS in the response's files array. After this tool returns, you MUST iterate over files and write each entry's content verbatim to its path using your native file-write capability (e.g. Write / edit_file / create_file — whatever your client exposes). Create parent directories as needed. Returned paths are project-root-relative and already translated to the .3tg/ mirror convention where applicable (e.g. specs land under .3tg/<source-path>.3tg.md; tests / mocks travel through unchanged). Write each path verbatim. Do NOT claim "Generated test file: <path>" unless you have actually written the file. The user will assume the MCP wrote it and waste time looking for a non-existent file. If you can't write for some reason (permission denied, no write capability in this client), return the contents inline in your message so the user can copy-paste them. Never report success silently when the write didn't happen.

Agent View of the PolicyLayer registry record for `create_tests_from_spec`. HTML page: https://policylayer.com/tools/dev-3tg-mcp/create-tests-from-spec

## Facts

- Tool: `create_tests_from_spec`
- Server: 3TG Test Generation (`https://mcp.3tg.dev/mcp`) — https://policylayer.com/tools/dev-3tg-mcp.md
- Homepage: https://github.com/https://mcp.3tg.dev/mcp
- Risk category: Write (Medium risk)
- Registry record: grade D, identity unverified
- Server auth posture: open
- Server rate-limited: no
- Parameters: 7 (4 required)
- Recommended policy verdict: Rate-limited

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `clientId` | string | yes | The 3tg.dev client ID. |
| `fileName` | string | yes | Path of the source file relative to the user's project root (e.g. "src/foo/bar.ts"). The spec filename is derived as the same path with `.ts` / `.tsx` replaced |
| `settings` | object | no | Subset of .3tg/settings.json relevant to this tool. |
| `cliConfig` | object | no | Optional per-request 3TG CLI config. The agent assembles this from TWO disk locations and merges them (per-source wins on conflict) before forwarding the merged |
| `moduleType` | string | no | Optional Node module type of the consumer project — the value of the `type` field in the project root's `package.json`. The agent reads that one field (only) an |
| `sourceCode` | string | yes | Full UTF-8 contents of the source file. |
| `specContent` | string | yes | Full UTF-8 contents of the `.3tg.md` spec — as the user has edited it locally under `.3tg/<sourceDir>/<basename>.3tg.md`. |

Parameters from the server's own tool schema.

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_tests_from_spec",
    "arguments": {
      "clientId": "<clientId>",
      "fileName": "<fileName>",
      "sourceCode": "<sourceCode>",
      "specContent": "<specContent>"
    }
  }
}
```

## Why create_tests_from_spec is rated Medium

This tool creates new test files from specification input. While file creation is a write operation (reversible), the impact is constrained to test artifacts in a development/sandbox context. It does not execute tests, delete data irreversibly, or cause external side effects.

From the tool's own definition: "Tool description states it will 'materialise the rows into a runnable test file' and '3TG also writes a `<ba[sename>...` indicating file creation/output generation."

Risk signals: Accepts file system path (fileName) · High parameter count (12 properties) · Admin/system-level operation

## Use case

AI agents use create_tests_from_spec to create or update resources in 3TG Test Generation, usually the action step of a workflow, after the agent has gathered context. Every call changes real data in your 3TG Test Generation environment.

## Recommended policy (PolicyLayer)

Verdict: **Rate-limited**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches 3TG Test Generation:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "create_tests_from_spec": {
      "limits": [
        {
          "counter": "create_tests_from_spec_rate",
          "window": "minute",
          "max": 30,
          "scope": "grant"
        }
      ]
    }
  }
}
```

## Other tools on 3TG Test Generation (9)

- `get_client_info` — Read — https://policylayer.com/tools/dev-3tg-mcp/get-client-info.md
- `help` — Read — https://policylayer.com/tools/dev-3tg-mcp/help.md
- `validate_config` — Read — https://policylayer.com/tools/dev-3tg-mcp/validate-config.md
- `validate_spec` — Read — https://policylayer.com/tools/dev-3tg-mcp/validate-spec.md
- `create_agent_instructions` — Write — https://policylayer.com/tools/dev-3tg-mcp/create-agent-instructions.md
- `create_mock_for_function` — Write — https://policylayer.com/tools/dev-3tg-mcp/create-mock-for-function.md
- `create_spec` — Write — https://policylayer.com/tools/dev-3tg-mcp/create-spec.md
- `create_spec_for_function` — Write — https://policylayer.com/tools/dev-3tg-mcp/create-spec-for-function.md
- `create_tests` — Write — https://policylayer.com/tools/dev-3tg-mcp/create-tests.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=dev-3tg-mcp · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/dev-3tg-mcp
