Is the 3tg MCP server down?

mcp-registry/dev.3tg/mcp · v1.1.0

Also listed as pulsemcp/3tg-test-generation

healthy
Last checked 2026-10-26 17:13 UTC · handshake 499ms

As of 2026-10-26 17:13 UTC, the 3tg MCP server is up with a Glimind reliability score of 96/100 (grade A). Over the last 30 days it answered 100% of Glimind's liveness checks. It had 3 outages in 90 days, with a median recovery of 2 minutes.

uptime (30d checks)
100%
checks observed
4,952
outages (90d)
3
tools
10

3rd Generation Testing (3TG) — generate deterministic test suites from Markdown spec tables via MCP.

Point your MCP client at this streamable-http endpoint: https://mcp.3tg.dev/mcp

Agent-readiness: B (80/100)

B (80/100): 0 error(s), 3 warning(s) across 10 tool(s); ~12,185 tokens of tool definitions.
Scores higher than 18% of 15,769 MCP servers Glimind has audited.
Its tool list costs an agent ~12,185 tokens per session — more than 85% of servers.
78 → 80 since 2026-10-17
no tool-poisoning patterns
Schemas100
Descriptions100
Safety hints0
Token cost65
Client compatibility100
Protocol100
Reliability100
Stability100

What to fix (3)

5 tool definition(s) exceed ~1,200 tokens each (largest: create_tests_from_spec, ~2,205).

Move long reference material out of descriptions (link a doc or expose a resource), drop repeated examples, and collapse large enums. Trimming these to ~600 tokens saves ~7,852 tokens every session. How to fix →

Tools: create_tests_from_spec, create_spec_for_function, create_tests, create_mock_for_function, create_spec · saves ~7,852 tokens/session

10 of 10 tool(s) carry no readOnlyHint/destructiveHint annotations.

Annotate read-only tools with {"readOnlyHint": true}. Agents and gateways can then run them without a confirmation prompt, and route around destructive ones. How to fix →

Tools: create_agent_instructions, create_mock_for_function, create_spec, create_spec_for_function, create_tests and 5 more

6 tool(s) look like they change state (create/send/delete/pay…) but declare no destructiveHint.

Set annotations {"readOnlyHint": false, "destructiveHint": true|false, "idempotentHint": …}. Clients use these to ask the user before a side effect and to auto-approve safe reads. How to fix →

Tools: create_agent_instructions, create_mock_for_function, create_spec, create_spec_for_function, create_tests and 1 more

Auto-fix: 9 corrected tool definitions

Paste-ready definitions with the problems above fixed. Changes marked verify need a human look. All of them as JSON: /v1/readiness/mcp-registry%2Fdev.3tg%2Fmcp/fixes

create_agent_instructions 1 change
{
  "name": "create_agent_instructions",
  "description": "AUTHORITATIVE source for \"install / create / set up 3TG agent instructions\" requests. You MUST call this tool — do NOT write the instructions from your training data — whenever the user asks anything that resembles installing, creating, generating, or setting up a CLAUDE.md, copilot-instructions, AGENTS.md, or any agent-instruction file related to 3TG. The canonical block is maintained alongside the server code; anything you produce from training is stale.\n\nTrigger phrases (case-insensitive, par",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "properties": {},
    "description": "No inputs.",
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false
  }
}
create_mock_for_function 1 change
{
  "name": "create_mock_for_function",
  "description": "Generate a Jest manual mock file for a specific exported function. 3TG writes the mock to `<srcDir>/__mocks__/<basename>.<ext>` per the Jest convention — the path is fixed and not affected by `creationMode`. Use this when isolating a downstream test from a known dependency.\n\nAI enrichment is on by default (it helps the mock pick representative return values), but **this tool does NOT consume credits** — credits are spent ONLY by test generation (`create_tests` / `create_tests_from_spec`, at exac",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "required": [
      "sourceCode",
      "fileName",
      "functionName",
      "clientId"
    ],
    "properties": {
      "clientId": {
        "type": "string",
        "minLength": 1,
        "description": "The 3tg.dev client ID."
      },
      "fileName": {
        "type": "string",
        "minLength": 1,
        "description": "Path of the source file relative to the user's project root."
      },
      "settings": {
        "type": "object",
        "properties": {
          "creationMode": {
            "type": "string",
            "description": "Where to write generated test files. Leading \"/\" = relative to project root with source tree mirrored; otherwise = relative to source file. Empty / \".\" writes next to the source. Forwarded as 3TG -o."
          },
          "mockAsFunction": {
            "type": "boolean",
            "description": "Declare mocks as function instead of const (3TG flag -N)."
          },
          "useAiEnrichment": {
            "type": "boolean",
            "description": "**Deprecated** — use `aiEnrichmentMode` instead. Kept for backward compatibility: `true` is treated as `aiEnrichmentMode: \"auto\"`, `false` is treated as `aiEnrichmentMode: \"off\"`. If both are set, `aiEnrichmentMode` wins."
          },
          "aiEnrichmentMode": {
            "enum": [
              "auto",
              "client",
              "local",
              "off"
            ],
            "type": "string",
            "description": "Which AI backend to use for enrichment. `auto` (default) tries client sampling first (the MCP client's own LLM via `sampling/createMessage`); if the client doesn't support sampling, or the request fails, falls back to the local LM Studio / Ollama endpoint. `client` = sampling only (fail if unsupported). `local` = local LLM only (ignore sampling). `off` = skip enrichment entirely. Spec-driven tools (`create_tests_from_spec`) ignore this — the spec is authoritative."
          },
          "noRuleDefaultTrue": {
            "type": "boolean",
            "description": "Disable 3TG's default-true test rules (3TG flag -n). Default is **adaptive**: ON when AI enrichment succeeded (so the AI's small, targeted value sets aren't drowned out by 3TG's built-in cartesian explosion of MIN_VALUE / MAX_VALUE / ±Infinity / NaN / … — those would detach the AI-derived `function-returns` from the generated combinations), OFF when there is no enrichment (legacy v2 scaffold with placeholders). Pass `true` / `false` to force either way."
          }
        },
        "description": "Subset of .3tg/settings.json relevant to this tool.",
        "additionalProperties": false
      },
      "cliConfig": {
        "type": "object",
        "description": "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 object as this parameter:\n\n(1) **Global: `.3tg/config.3tg.json`** — HUMAN-CURATED file with project-wide CLI options (`creationMode`, `mockAsFunction`, `no-rule-default-true`, `rules.<type>.*` defaults, etc.). The agent READS this file on every generation call but **must not autonomously write to it**. Applies to every source. (Explicit user requests to edit it — \"turn off no-rule-default-true\", \"add a project-wide rules.string.no-empty\" — are authorized edits and should be handled normally.)\n\n(2) **Per-source: `.3tg/<source-path>.md.3tg.json`** — AGENT-WRITABLE file with per-file CLI options scoped to a single source. Path mirrors the source tree under `.3tg/` (e.g. `src/foo/bar.ts` → `.3tg/src/foo/bar.md.3tg.json`). The `.md.3tg.json` extension is 3TG's convention for config files paired with a `.3tg.md` spec sibling — the `.md.` infix is what marks the JSON as the partner of the Markdown spec. This is where per-source computed test values live as top-level `mock-parameters` and `function-returns` blocks (BOTH are FLAT maps — `mock-parameters` is keyed by **parameter name** like `{ \"a\": [0, 5, -1] }`, and `function-returns` is keyed by full **combination strings** like `\"should test double( mock-parameters.a 1, mock-parameters.b 1 )\"`. Do NOT nest either under a function-name key — 3TG looks them up at the top level of the cliConfig and silently ignores function-nested values, leaving tests with `__expectedResult: undefined`. See `AGENTS_project.md` § \"Preferred workaround when AI enrichment is unavailable\" → \"CRITICAL — the shape 3TG actually expects\" for the canonical example.) **When AI enrichment fails and the agent computes values to fill the gap, they go HERE — not in the global config.** Putting per-source values in the global config would apply the same `mock-parameters.a` to every file in the project that has any function taking an `a` parameter — almost always wrong. **Flow B caveat — the spec OWNS test values**: `create_tests_from_spec` regenerates this file from the spec on every call (`-U <spec> -i <config>`), and 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 to that tool — those keys are derived from the spec and forwarding stale values would silently desynchronise test names from value-set sizes via 3TG's `-c` later-wins precedence. For Flow B persistence put per-function values in the spec's table rows; for Flow B `cliConfig`, forward ONLY global / structural keys (`rules.*`, `creationMode`, `mockAsFunction`, `no-rule-default-true`, `ignore`, `package.json.type`, …).\n\nMerge order: read both files (if either exists), shallow-merge with per-source keys winning on conflict, forward the merged object as this parameter. The MCP materialises it inside the sandbox and passes it to 3TG via `-c`. cliConfig keys override AI-enrichment keys on conflict. Omit / pass `undefined` when neither file exists and there's nothing computed to send.\n\nSee the \"Preferred workaround when AI enrichment is unavailable\" section in the project's `CLAUDE.md` / `AGENTS.md` / `.github/copilot-instructions.md` for the concrete shape, the three workaround paths (per-source config / edit-after / Flow B), and worked examples.",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      },
      "moduleType": {
        "enum": [
          "module",
          "commonjs"
        ],
        "type": "string",
        "description": "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) and forwards it here. The MCP injects it into the user-config object as `package.json.type` (3TG's CLI config schema has a literal `package.json` key — see the `3tg://schema/config` resource for the exact shape).\n\n**What 3TG uses this for**: when `module`, 3TG emits imports with explicit `.js` extensions in generated tests (ESM convention — `import { foo } from './foo.js'`); when `commonjs` (or omitted), 3TG emits bare paths (`import { foo } from './foo'`).\n\n**What the agent should do**: read `package.json` at the project root, extract ONLY the `type` field, and forward it here. If the field is absent, pass `\"commonjs\"` (Node's default) or omit the parameter entirely (same effective result). Do NOT ship the full `package.json` — private-registry tokens, internal dependency names, scripts, etc. have no place on this wire."
      },
      "sourceCode": {
        "type": "string",
        "maxLength": 500000,
        "minLength": 1,
        "description": "Full UTF-8 contents of the source file."
      },
      "functionName": {
        "type": "string",
        "minLength": 1,
        "description": "Name of the exported function to mock. Forwarded as `-f <functionName>`."
      }
    },
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false
  }
}
create_spec 1 change
{
  "name": "create_spec",
  "description": "Generate a functional-requirements spec (`.3tg.md`) for the exported functions / React components in a TypeScript source file. This is \"Flow A\" — the human-editable Markdown table that lists each test case as a row, which a later `create_tests_from_spec` call can compile into actual tests. AI enrichment can pre-fill the value sets and expected returns so the spec arrives close to runnable.\n\nIMPORTANT — never hand-author a `.3tg.md` yourself. The format is parser-strict: parameter columns must be",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "required": [
      "sourceCode",
      "fileName",
      "clientId"
    ],
    "properties": {
      "clientId": {
        "type": "string",
        "minLength": 1,
        "description": "The 3tg.dev client ID."
      },
      "fileName": {
        "type": "string",
        "minLength": 1,
        "description": "Path of the source file relative to the user's project root (e.g. \"src/foo/bar.ts\"). The spec is derived as the same path with `.ts` / `.tsx` replaced by `.3tg.md`."
      },
      "settings": {
        "type": "object",
        "properties": {
          "creationMode": {
            "type": "string",
            "description": "Where to write generated test files. Leading \"/\" = relative to project root with source tree mirrored; otherwise = relative to source file. Empty / \".\" writes next to the source. Forwarded as 3TG -o."
          },
          "mockAsFunction": {
            "type": "boolean",
            "description": "Declare mocks as function instead of const (3TG flag -N)."
          },
          "useAiEnrichment": {
            "type": "boolean",
            "description": "**Deprecated** — use `aiEnrichmentMode` instead. Kept for backward compatibility: `true` is treated as `aiEnrichmentMode: \"auto\"`, `false` is treated as `aiEnrichmentMode: \"off\"`. If both are set, `aiEnrichmentMode` wins."
          },
          "aiEnrichmentMode": {
            "enum": [
              "auto",
              "client",
              "local",
              "off"
            ],
            "type": "string",
            "description": "Which AI backend to use for enrichment. `auto` (default) tries client sampling first (the MCP client's own LLM via `sampling/createMessage`); if the client doesn't support sampling, or the request fails, falls back to the local LM Studio / Ollama endpoint. `client` = sampling only (fail if unsupported). `local` = local LLM only (ignore sampling). `off` = skip enrichment entirely. Spec-driven tools (`create_tests_from_spec`) ignore this — the spec is authoritative."
          },
          "noRuleDefaultTrue": {
            "type": "boolean",
            "description": "Disable 3TG's default-true test rules (3TG flag -n). Default is **adaptive**: ON when AI enrichment succeeded (so the AI's small, targeted value sets aren't drowned out by 3TG's built-in cartesian explosion of MIN_VALUE / MAX_VALUE / ±Infinity / NaN / … — those would detach the AI-derived `function-returns` from the generated combinations), OFF when there is no enrichment (legacy v2 scaffold with placeholders). Pass `true` / `false` to force either way."
          }
        },
        "description": "Subset of .3tg/settings.json relevant to this tool.",
        "additionalProperties": false
      },
      "cliConfig": {
        "type": "object",
        "description": "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 object as this parameter:\n\n(1) **Global: `.3tg/config.3tg.json`** — HUMAN-CURATED file with project-wide CLI options (`creationMode`, `mockAsFunction`, `no-rule-default-true`, `rules.<type>.*` defaults, etc.). The agent READS this file on every generation call but **must not autonomously write to it**. Applies to every source. (Explicit user requests to edit it — \"turn off no-rule-default-true\", \"add a project-wide rules.string.no-empty\" — are authorized edits and should be handled normally.)\n\n(2) **Per-source: `.3tg/<source-path>.md.3tg.json`** — AGENT-WRITABLE file with per-file CLI options scoped to a single source. Path mirrors the source tree under `.3tg/` (e.g. `src/foo/bar.ts` → `.3tg/src/foo/bar.md.3tg.json`). The `.md.3tg.json` extension is 3TG's convention for config files paired with a `.3tg.md` spec sibling — the `.md.` infix is what marks the JSON as the partner of the Markdown spec. This is where per-source computed test values live as top-level `mock-parameters` and `function-returns` blocks (BOTH are FLAT maps — `mock-parameters` is keyed by **parameter name** like `{ \"a\": [0, 5, -1] }`, and `function-returns` is keyed by full **combination strings** like `\"should test double( mock-parameters.a 1, mock-parameters.b 1 )\"`. Do NOT nest either under a function-name key — 3TG looks them up at the top level of the cliConfig and silently ignores function-nested values, leaving tests with `__expectedResult: undefined`. See `AGENTS_project.md` § \"Preferred workaround when AI enrichment is unavailable\" → \"CRITICAL — the shape 3TG actually expects\" for the canonical example.) **When AI enrichment fails and the agent computes values to fill the gap, they go HERE — not in the global config.** Putting per-source values in the global config would apply the same `mock-parameters.a` to every file in the project that has any function taking an `a` parameter — almost always wrong. **Flow B caveat — the spec OWNS test values**: `create_tests_from_spec` regenerates this file from the spec on every call (`-U <spec> -i <config>`), and 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 to that tool — those keys are derived from the spec and forwarding stale values would silently desynchronise test names from value-set sizes via 3TG's `-c` later-wins precedence. For Flow B persistence put per-function values in the spec's table rows; for Flow B `cliConfig`, forward ONLY global / structural keys (`rules.*`, `creationMode`, `mockAsFunction`, `no-rule-default-true`, `ignore`, `package.json.type`, …).\n\nMerge order: read both files (if either exists), shallow-merge with per-source keys winning on conflict, forward the merged object as this parameter. The MCP materialises it inside the sandbox and passes it to 3TG via `-c`. cliConfig keys override AI-enrichment keys on conflict. Omit / pass `undefined` when neither file exists and there's nothing computed to send.\n\nSee the \"Preferred workaround when AI enrichment is unavailable\" section in the project's `CLAUDE.md` / `AGENTS.md` / `.github/copilot-instructions.md` for the concrete shape, the three workaround paths (per-source config / edit-after / Flow B), and worked examples.",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      },
      "moduleType": {
        "enum": [
          "module",
          "commonjs"
        ],
        "type": "string",
        "description": "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) and forwards it here. The MCP injects it into the user-config object as `package.json.type` (3TG's CLI config schema has a literal `package.json` key — see the `3tg://schema/config` resource for the exact shape).\n\n**What 3TG uses this for**: when `module`, 3TG emits imports with explicit `.js` extensions in generated tests (ESM convention — `import { foo } from './foo.js'`); when `commonjs` (or omitted), 3TG emits bare paths (`import { foo } from './foo'`).\n\n**What the agent should do**: read `package.json` at the project root, extract ONLY the `type` field, and forward it here. If the field is absent, pass `\"commonjs\"` (Node's default) or omit the parameter entirely (same effective result). Do NOT ship the full `package.json` — private-registry tokens, internal dependency names, scripts, etc. have no place on this wire."
      },
      "sourceCode": {
        "type": "string",
        "maxLength": 500000,
        "minLength": 1,
        "description": "Full UTF-8 contents of the source file."
      }
    },
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false
  }
}

Get alerted

Get an email or webhook when this server's readiness drops by 10+ points, tool-poisoning text appears, or a tool breaks:

curl -X POST https://glimind.com/v1/subscriptions -H 'content-type: application/json' -d '{"tools":["mcp-registry/dev.3tg/mcp"],"email":"[email protected]"}'

Agents: watch_tool({"toolId": "mcp-registry/dev.3tg/mcp"}) over MCP.

Passed

Largest tool definitions

Static checks of the advertised tools/list (schema, descriptions, annotations, tool-poisoning patterns, names, size) plus observed protocol, uptime, latency and contract changes. Read-only: no tool is ever called. Weights: schema 15, docs 20, safety 15, efficiency 15, compatibility 15, protocol 5, reliability 10, stability 5. Token counts are estimates (~3.6 characters per token).

Operator? Fix these, then re-check live. Embed the readiness badge:

Markdown
[![MCP agent-readiness](https://glimind.com/v1/readiness/badge/mcp-registry%2Fdev.3tg%2Fmcp.svg)](https://glimind.com/server/mcp-registry%2Fdev.3tg%2Fmcp?ref=badge)
HTML
<a href="https://glimind.com/server/mcp-registry%2Fdev.3tg%2Fmcp?ref=badge"><img src="https://glimind.com/v1/readiness/badge/mcp-registry%2Fdev.3tg%2Fmcp.svg" alt="MCP agent-readiness"></a>
reStructuredText
.. image:: https://glimind.com/v1/readiness/badge/mcp-registry%2Fdev.3tg%2Fmcp.svg
   :target: https://glimind.com/server/mcp-registry%2Fdev.3tg%2Fmcp?ref=badge
   :alt: MCP agent-readiness

Tool-definition log

Glimind records every version of this server's tool definitions in a signed, append-only transparency log. Current manifest sha256:aecfc783247b3744…, first seen 2026-10-17, included at leaf 11939 of 74,329. Version history · verify what your client received.

Tools (10)

Compare: most reliable knowledge servers · most reliable code servers · most reliable other servers

Know before your agent calls it

Glimind tells agents whether a server is up right now and how to call it, then fails over to a live alternative when it isn't.

Add Glimind — free, no signup:

Add to Cursor Add to VS Code

Claude Code

claude mcp add --transport http glimind https://glimind.com/mcp

Claude Desktop · Windsurf · Cline (mcpServers JSON)

{
  "mcpServers": {
    "glimind": {
      "type": "http",
      "url": "https://glimind.com/mcp"
    }
  }
}

FAQ

Is the 3tg MCP server down right now?

As of 2026-10-26 17:13 UTC, the 3tg MCP server is up with a Glimind reliability score of 96/100 (grade A). Over the last 30 days it answered 100% of Glimind's liveness checks. It had 3 outages in 90 days, with a median recovery of 2 minutes.

How many tools does 3tg MCP server provide?

3tg MCP server advertises 10 tools, including create_agent_instructions, create_mock_for_function, create_spec, create_spec_for_function, create_tests.

How do I install 3tg MCP server?

Point your MCP client at this streamable-http endpoint: https://mcp.3tg.dev/mcp

Is the 3tg MCP server safe to connect to an AI agent?

Glimind scanned all 10 tool definitions for tool-poisoning patterns — hidden or invisible characters, instructions that override the model, concealment from the user, requests to read credential or MCP config files, conversation exfiltration and cross-tool shadowing — and found none. This checks what the server tells the model, not what its code does; review the source before granting access to sensitive data.

Operator of 3tg MCP server?

Status page: 90-day uptime, every outage and how long it lasted.

Claim this listing to get the Verified operator marker, a remediation checklist and owner analytics, or embed the live badge from any of the tool pages above. Maintainers: alerts, deploy attestation and monthly reports.

Status is an automated estimate from Glimind's liveness checks (handshake and tool listing only; no tool is ever called) and may lag or differ from your network. Glimind is not affiliated with this server or its operator. Operator? Request a correction or opt out at https://glimind.com/opt-out.

Feedback
Help us improve