Skip to content

docs(mcp): recorded tool arguments for every served server, parser prose, and full generator-input dispatch - #441

Merged
jonit-dev merged 9 commits into
developfrom
docs-depth-capabilities
Oct 5, 2026
Merged

jonit-dev merged 9 commits into
developfrom
docs-depth-capabilities

Conversation

@jonit-dev

@jonit-dev jonit-dev commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

TL;DR — PRD-534 phase 2 and 4, engine half. The site's docs are rendered from this repository at build time, so this branch is where their depth comes from: task prose for the two parsers nothing explained, the arguments and schemas of every served MCP tool recorded from a live tools/list, and a deploy dispatch that now fires for every input the capability-manifest generator reads. Draft for review; nothing here is deployed.

Why

threenative.com/docs is built from docs/guides/*.md and from the recorded MCP surfaces beside the manifest, so an API page can only be as deep as what is committed here. Three gaps: raw-unreal and ueformat had no task prose, the MCP page could not answer what a tool takes, and the site's redeploy dispatch missed most of the generator's real inputs.

What changed

  • docs/guides/unreal-assets.md covers choosing between the two parsers, loading local/browser/native bytes, layouts, codecs, limits and the real failure codes; metahuman.md is new and listed in the guides README.
  • inputSchemas and descriptions are recorded for every served tool, taken from the same live tools/list the capture script reads. 59 tools across four surfaces, each with a schema and a description.
  • api.md states the discovery loop, the relevance floor, the result caps and the JSON-RPC error codes the servers actually return.
  • site-docs.yml now dispatches the site for packages/*/src/**, packages/create-threenative/templates/**, packages/engine-mcp/src/**, the template closure, the manifest itself and the six modules the generator imports. capability-site-docs.spec.ts derives that list from the generator and fails when an import is uncovered.
  • style: the six files this branch wrote now satisfy the repo-wide biome gate. The four recorded snapshots parse to identical values.

Checks, run in the lane

  • tsx scripts/check-doc-links.ts — 2399 relative links across 1231 files, no missing target.
  • vitest run over the doc, guide, capability-manifest and CI specs — 72 tests, and 189 for the generation/CI selection.
  • tsc --noEmit exit 0, biome check exit 0.
  • primary-docs.spec.ts, evidence-budget.spec.ts and verify-golden-path.spec.ts need a full pnpm install and a browser; they are not runnable in this worktree and pass in the engine primary, which is the control for "environment, not change".

Dependency and blocker

  • The site PR depends on this one: the site regenerates the capability manifest from this repository's source, so the new arguments and verbatim schemas reach a published page after this merges.
  • wrangler deploy in the site's deploy job fails at the Cloudflare zone route step (No access to the specified resource). Zone Workers Routes Edit plus DNS Edit and Zone Read on zone f8da484aa6eb33895482a6cd21fc4623 is the unblock. No production action is taken here.
  • A draft pull request runs no jobs by design in this repository (ci.yml gives drafts nothing), so every number above is a local run in the lane, not a CI check. Nothing here is green in CI until it is marked ready for review.

… the API page

raw-unreal and ueformat held 27 manifest entries and no task guide, so every one of
them was an API heading with no instructions. The new guide names only real exports
and links to no file that does not exist; a spec now fails the build when a guide or
recipe names an export the package does not ship.
The recorded surfaces listed 59 tool names and no arguments, so the docs could not
answer what a tool takes. The schemas come from the same live tools/list response
the capture script already read, and a spec compares both in-repo servers' snapshots
against what they serve.
The Unreal guide wrote `new DefaultLoadingManager()` for a three.js export that
is an instance, ran its CLI through `npx` against a package that is not on the
registry, called `INVALID_RAW_MESH` proof of a pre-UE4.18 source model when the
code throws it for four different reasons, and lost its trailing newline. The
guide-imports guard cannot see any of that: every symbol it names is real. So
two checks now read the guide's own text - one typechecks each snippet against
the real packages, the other runs the loader line the guide writes through the
committed .uasset fixture. Both go red on the old line.

The asset MCP snapshot carried 46 tool names and no arguments, so the recipes
restated arguments by hand and one of them, polyhaven_import_model, names a tool
the pinned server does not serve. The capture script now records each tool's
description and input schema from the same live tools/list it already read, the
recipe describes the workflow the served tools actually support, and a check
fails any recipe that names a `<server>_<action>_<noun>` no recorded surface
serves.

MetaHuman had a package README and no guide, so it was reachable from the API
page but not from the guides navigation. docs/guides/metahuman.md carries the
task walkthrough, and the two snippet checks cover it too.
The sculpt snapshot listed five tool names and no arguments, so the site could
not say what any of them takes. The capture script now drives both published
servers in the repository's dependency pins — asset and sculpt — and records
each tool's description and input schema from the same live tools/list it
already read. Nothing is written by hand.
The Unreal guide claimed a registry lookup it never made, and read a
`licenseeVersion` the parser does not model as a date. It now says the blob
uses a serialized layout this parser does not model. The MetaHuman guide
disposed the handle while the scene still held the before-render callback that
calls `update()`, so `removeFace()` now comes first.

Three gates were weaker than they looked. `guide-snippets` compared an unscoped
import against a scoped manifest name, so it never found the package it meant.
`guide-example` stood a plain object in for `DefaultLoadingManager`, which a
`new` on a real instance would have caught. `mcp-tool-schemas` asserted
`not.toBe("")`, which `undefined` passes.
A public export, an export map, a template manifest or a generator module all
move the manifest the site's API reference renders, and the site regenerates it
at build time now, so each has to reach the redeploy. The new spec derives the
path list from scripts/build-capability-manifest.ts and also proves the freshness
gate stays required for a change of each kind.
…s branch touched

The repo-wide biome gate failed on six files this branch wrote: the four
recorded *-mcp-tools.json snapshots, guide-imports.spec.ts and
capture-blender-mcp-tools.ts. Repaired with biome itself; the snapshots parse
to identical values, so the site publishes the same schemas.
@jonit-dev
jonit-dev marked this pull request as ready for review October 5, 2026 03:34
… test finds it

The guide check ran from the package directory in CI, where the cwd-relative
path missed the repository copy and the suite failed to load. Resolve the
guide the way packages/physics already resolves its own documentation.
@jonit-dev
jonit-dev merged commit 3794f57 into develop Oct 5, 2026
53 of 68 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant