[UPDATE] Wiki/Doc#1157
Conversation
Stand up /website with Docusaurus 3.x, hand-written so the scaffold ships
exactly what we need (no default blog, no tutorial-basics clutter).
What lands in M1:
- /website/ structure: package.json, docusaurus.config.js, sidebars.js,
src/css/custom.css, static/{logo,favicon,social-card,.nojekyll}
- Getting Started: Overview + Install pages (extracted from README §1-2)
- .github/workflows/docs-deploy.yml: builds on PR, deploys to
https://coplaydev.github.io/unity-mcp/ on push to beta
- @easyops-cn/docusaurus-search-local for day-1 search (Algolia DocSearch
application is M5)
URL strategy is brand-neutral: slugs like /getting-started/ and (later)
/reference/tools/manage-script — never /mcp-for-unity/... — so a future
product rename touches docusaurus.config.js, not URLs.
Subsequent milestones:
- M2: migrate /docs/* into /website/docs/ per locked IA
- M3: tools/generate_docs_reference.py + auto-generated tool catalog
- M4: net-new content pages (First Prompt, Multi-Instance, etc.)
- M5: slim root README to a landing card + governance files
See /Users/scriptwonder/.claude/plans/as-unity-mcp-coming-close-indexed-karp.md
for the full plan.
15 existing markdown files moved with git mv (history preserved), wired into the Docusaurus sidebar across Guides, Architecture, Contributing, and Migrations categories. Images that the migration docs reference copied into website/static/img/ and refs rewritten to /img/... Brand-neutral URL strategy holds: every slug omits "mcp-for-unity" / "unity-mcp" — e.g. /guides/cli, /architecture/remote-auth, /migrations/v8. A future rename touches docusaurus.config.js, not URLs. Deferred to a follow-up: - docs/development/README-DEV-zh.md (Chinese dev guide) - docs/i18n/README-zh.md (Chinese overview) These need Docusaurus i18n config (defaultLocale + zh in locales) and a full translation pass before they make sense on the site. Minor edits limited to making files build-clean (M2 plan: no content rewrites): - Front-matter added to cli-examples.md and cursor.md (no top-level H1) - v8.md's [CUSTOM_TOOLS.md] link repointed at /guides/custom-tools - dev-setup.md's broken language switcher repointed at GitHub source - install.md's M2 forward-reference link now goes to /guides/client-configurators Root README still points at docs/images/ for its hero gif — that path keeps working because the images remain in docs/images/ for now and will move only when README is slimmed in M5.
Introduces tools/generate_docs_reference.py — the single Python script
that emits every reference page under website/docs/reference/ from the
live @mcp_for_unity_tool and @mcp_for_unity_resource registries.
What lands:
- tools/generate_docs_reference.py: introspects function signatures
(Annotated[Type, "description"]), preserves hand-authored examples
between <!-- examples:start --><!-- examples:end --> markers, supports
--write (default) and --check (CI drift detection) modes.
- tools/hooks/pre-commit: installed via tools/install-hooks.sh; when a
staged change touches Server/src/services/{tools,resources,registry},
regenerates the reference and re-stages it. Contributors don't have
to remember.
- .github/workflows/docs-generate.yml: runs --check on every PR and on
pushes to beta. Fails with a one-line fix command if the committed
reference drifts from the registry. Also runs a count sanity check
(#decorators must equal #generated md files).
- website/docs/reference/: 43 tool pages across 9 groups (animation,
core, docs, probuilder, profiling, scripting_ext, testing, ui, vfx)
+ group landing pages + 25-resource catalog. Sidebar wired with
Docusaurus's autogenerated mode so new tools appear automatically.
- README.md: "Available Tools" / "Available Resources" lists retired —
these were drifting on every release. Replaced with a single link to
the generated reference. (Root README slim is M5.)
Source of truth: Python. The C# attributes carry only Name/Group/
Description; the Python @decorator owns the richest typing via
Annotated[...], which is what MCP clients actually see over the wire.
Tested:
- generator runs clean (43 tools, 9 groups, 25 resources, deterministic)
- --check exits 0 against committed output
- pre-commit hook installs via existing tools/install-hooks.sh path
The repo was missing the standard governance files that a 10K-star project typically has. Adding them now — they're entirely additive, no removal of existing content. Full README slim is the rest of M5, deferred until the live docs site can be previewed. What lands: - CONTRIBUTING.md: branch-off-beta workflow, dev quickstart, pre-commit hook reference, PR checklist, places that need help - CODE_OF_CONDUCT.md: Contributor Covenant 2.1 with conduct@coplay.dev enforcement contact - SECURITY.md: private reporting via security@coplay.dev, supported versions, what counts vs doesn't, fail-closed network defaults - .github/ISSUE_TEMPLATE/bug_report.yml: structured bug form with Unity/package/client/transport/OS dropdowns - .github/ISSUE_TEMPLATE/feature_request.yml: structured feature form with scope hint and contribution willingness - .github/ISSUE_TEMPLATE/config.yml: routes Discord/docs/security/ discussions away from the issue tracker, disables blank issues
…cs/v2-wiki-refresh
Two M1 follow-ups uncovered by the first local `npm run build`:
1. MDX 3 was treating `{name: value}`, `{r, g, b, a}`, `<T>` and the
multi-line JSON examples in tool descriptions as JS expressions /
JSX tags. All 7 generated reference pages failed to compile.
Fix: markdown.format = 'detect' — .md uses CommonMark (no expression
parsing), .mdx keeps full MDX for future interactive components.
2. Visiting localhost:3000/unity-mcp/ landed on an empty docs index.
Fix: getting-started/index.md slug '/getting-started' → '/'. Now
the site root IS the Overview page; install stays at
/getting-started/install/. Footer link updated to match.
Also nests onBrokenMarkdownLinks under markdown.hooks (the deprecated
top-level option is removed in Docusaurus v4).
Generated by the first successful `npm install` in /website/. Required by `npm ci` in .github/workflows/docs-deploy.yml so the CI build pins exact dependency versions and doesn't surprise us on a fresh tree.
Typography upgrade matching modern AI-product docs sites (e.g. benchflow): - Satoshi (Fontshare, weights 300/400/500/700/900) for body and headings - JetBrains Mono (Google Fonts, 400/500/700) for monospace - Loaded via stylesheet links + preconnect hints in docusaurus.config.js - custom.css updates: --ifm-font-family-base, --ifm-font-family-monospace, tighter heading letter-spacing, slightly bumped line-height for Satoshi, brand color shifted to indigo (#4f46e5) to pair with the new sans - Inline code nudged 0.88em to sit on Satoshi's baseline Emojis removed across all in-house content for a cleaner, professional tone: - generator banner: dropped the gear glyph - generator parameter table: required column is now "yes" / "—" instead of an emoji checkbox (regenerated all 43 tool pages) - install.md: status-text instead of green-dot emoji - SECURITY.md: Yes / No instead of check/cross - ISSUE_TEMPLATE/config.yml: plain link labels, no leading emoji Verified: - npm run build succeeds (5.7s client, 4.5s server) - generator --check exits 0 (deterministic regeneration) - HTML head includes both font stylesheets + preconnect hints - CSS bundle resolves Satoshi and JetBrains Mono font-family stacks
9 hand-written pages flagged NEW in the locked IA. All wired into sidebars.js and verified by `npm run build`. Getting Started: - first-prompt.md: end-to-end "build a red cube" walkthrough with the exact MCP tool chain the assistant should call, common failure modes, and escalating prompts that exercise other groups. - clients.md: capability matrix across all 12 supported MCP clients (transport, auto-config, streaming, free tier, per-client toggles). Guides: - multi-instance.md: set_active_instance semantics — Name@hash, hash prefix, port shorthand; HTTP vs stdio isolation; per-call unity_instance routing for cross-project prompts. - tool-groups.md: the 9 groups, how manage_tools(activate/deactivate/ list_groups/sync/reset) works, why per-session visibility exists (prompt economy, routing clarity, package hygiene), server vs session state reconciliation. Architecture: - transports.md: HTTP vs stdio decision matrix, the architecture of each, what instance routing semantics each gives you, network security guards (loopback by default, LAN/remote opt-in). - python-layers.md: the three Python surfaces (MCP tools, CLI commands, resources), why they're hand-maintained instead of auto-generated, domain symmetry rule. - unity-compat.md: the four active shims, when to add a new shim, what doesn't belong in a shim, static-dispatch vs reflection patterns, link to the canonical UnityCompatShims.cs marker class. Contributing: - testing.md: Python pytest, Unity EditMode/PlayMode, multi-version compile matrix, pre-push/pre-commit hooks, stress scripts, CI surface. - docs.md: hand-written vs auto-generated split, examples block preservation rule, slug discipline (brand-neutral), redirect protocol for slug renames, CommonMark vs MDX. sidebars.js: uncommented the NEW entries; left reference/cli and reference/manifest TODOs in place for a follow-up. Verified: - npm run build succeeds (Client 2.4s, Server 1.1s) with no errors
…yn (M5b) Brings the root README in line with the live docs site. Everything optional or reference-y now lives in docs; the README is the landing card a 10K-star repo deserves. What survives in README (118 lines, ~120 target): - Logo + language selector - Aura sponsorship (unchanged) - Badges row, now with a Docs badge as first item - Tagline + hero gif - Big "Read the Docs" CTA after the gif (per discussion) - One-liner install (git URL only — Asset Store/OpenUPM moved to docs) - "Try it" example with one prompt + link to First Prompt walkthrough - Collapsed Recent Updates (last 4 entries only) - Community block (Discord/Issues/Discussions/SECURITY.md) - Contributing pointer (CONTRIBUTING.md + dev-setup docs) - Advanced block with links to Multi-Instance, Tool Groups, Roslyn, Remote Server Auth - License, Star History, Citation, Aura Tools block, Disclaimer What moved to docs: - Prerequisites + Asset Store/OpenUPM install paths → /getting-started/install - Setup wizard walkthrough → /getting-started/install - Per-client gotchas → /getting-started/install + /getting-started/clients - Manual Configuration JSON snippets → /getting-started/install - Multiple Unity Instances → /guides/multi-instance - Roslyn Script Validation → new /guides/roslyn page (NEW) - Troubleshooting → /guides/cursor + GitHub Wiki link - Telemetry + Security → SECURITY.md + /architecture/telemetry - Full release history → new /releases page (NEW), seeded from the current Recent Updates section Also: emoji removal pass on README (Godot AI line). Verified: - README is 118 lines (vs target ~120) - npm run build succeeds - All links resolve (no onBrokenLinks throws)
- docs-deploy.yml: actions/checkout with fetch-depth: 0 so Docusaurus's showLastUpdateTime / showLastUpdateAuthor resolves real per-file commit metadata. Shallow clones make every page report the latest build commit, which is useless to readers. - website/static/robots.txt: allow-all crawlers + sitemap reference. Required by Algolia DocSearch's crawler when the application gets approved; harmless before then. - /contributing/docs page: new sections covering first-time GitHub Pages enablement (Settings → Pages → Source: GitHub Actions) and the custom-domain CNAME path. Maintainers reading this would otherwise hit a 404 on first deploy and not know why. Verified: - npm run build succeeds (Server 935ms, Client 1.8s) - sitemap.xml lists all 80+ URLs - robots.txt copies to build/ correctly
Replaces AI-skeleton content with the actual CoplayDev/unity-mcp.wiki pages so the docs site has the real install/repair/troubleshooting material people have been linking to. Wiki pages absorbed: - 1.-Fix-Unity-MCP-and-Cursor,-VSCode,-Windsurf,-Rider → new /guides/uv-setup page. Covers Python 3.12+ install, uv install on macOS/Linux/Windows, common uv locations, the MCP for Unity window's "Choose UV Install Location" + "Repair Python Env" buttons, where the server lives per OS, macOS PATH gotchas. Replaces the shallow /guides/cursor page (deleted) — the cursor-specific Windows uv path fix moved into the new troubleshooting FAQ. - 2.-Fix-Unity-MCP-and-Claude-Code → new /guides/claude-code-cli page. Native installer + NVM + Homebrew Node paths, macOS PATH workaround. - 3.-Common-Setup-Problems → new /guides/troubleshooting page. macOS dyld ICU error, WSL2-to-Windows bridging (@aollivier82 contribution with port-proxy + firewall + WSL host IP discovery), Unity AI Assistant DLL conflict (@rkroska report), Claude Code / VS Code / Cursor FAQs. - Project-Roadmap (wiki) → new /architecture/project-roadmap page. Distinct from the existing /architecture/roadmap (2026 deep-research feature plan). This is the living high-level roadmap with Current Focus / Mid-Term / Long-Term / Icebox / Recently Completed sections the wiki maintains. Sidebar reorganized: Guides now leads with the install/setup pages (uv-setup, claude-code-cli, client-configurators), then capability (multi-instance, tool-groups, cli, cli-examples), then advanced (custom-tools, remote-server-auth, roslyn), then troubleshooting last. Verified: npm run build clean. One broken-anchor fix landed for the em-dash heading "FAQ — Claude Code" which slugifies to faq--claude-code (double dash).
Custom React landing page replaces the markdown-doc-as-homepage.
Refined CSS for a calmer, more spacious feel. Navbar gets icon
links for GitHub/Discord and a Reference + Releases quick-jump.
What lands:
- src/pages/index.js + 3 components (HomeHero, HomeStats, HomeFeatures):
hero with eyebrow, large headline, install one-liner, dual CTA;
4-cell stats row (43 tools, 25 resources, 12+ clients, Unity 2021.3+
through 6.x); 6-card feature grid linking to the most important
docs (tools, multi-instance, transports, tool-groups, docs-workflow,
custom-tools).
- getting-started/index.md slug moved from / to /getting-started so
the custom landing can claim the root. Title harmonized with
sidebar label ("Overview"); body H1 + intro updated to match.
- docusaurus.config.js navbar:
- Added Reference and Releases as left items (quick access to the
two most-trafficked pages)
- GitHub + Discord text labels replaced with icon links via
.header-icon-link CSS class + inline SVG backgrounds. Dark-mode
invert via CSS variable.
- src/css/custom.css:
- 16px base, 1.7 line-height, generous heading spacing
- Tighter heading letter-spacing (-0.012 to -0.022em)
- Subtle code-block borders, no garish shadow
- Cleaner tables (rounded, single border, no internal grid)
- Sidebar font 0.92rem, calmer hover/active states
- Navbar: no shadow, subtle bottom border, tighter height
- --ifm-toc-border-color set transparent for cleaner right rail
- Dark mode background tuned to near-black
Verified: npm run build clean. Smoke test: / returns custom hero,
/getting-started returns the doc, /guides/uv-setup renders new
wiki content, /guides/cursor correctly 404s.
- HomeHero: building_scene.gif rendered below the install block in a bordered, rounded frame with a one-line caption. lazy-loaded, sized 1200x675 to avoid layout shift. Asset copied from docs/images/ into website/static/img/ so the docs site is self-contained. - /reference/cli: new page documenting the mcp-for-unity CLI — invocation (uvx and uv run), how it talks to Unity over HTTP, global flags table, command-group → MCP-tool mapping (29 groups cross-linked to their generated tool reference pages), Click --help discovery, source pointers. - /reference/manifest: new page documenting manifest.json — its relationship to package.json (UPM) and pyproject.toml (PyPI), per-field reference (top-level, server, tools), MCPB bundle generation path. - sidebars.js: uncommented both reference items. Verified: build clean. Smoke test: / renders gif, /reference/cli + /reference/manifest both 200, gif fetch returns 2.2 MB.
Second iteration after user feedback. GitHub + Discord icons are now visually prominent without dominating the navbar. Search verified working in the production build (1.6 MB lunr index, /search page returns 200, queries for 'manage_material' and 'roslyn' both hit).
Problem: website/docs/releases.md and the README's "Recent Updates" block had drifted badly. README claimed v9.6.3 was the latest; the actual latest is v9.7.0 (and there are 60 releases on record going back to v4.0.0). Solution: - tools/sync_release_notes.py: pulls every non-draft release from the GitHub Releases API and renders both files. Uses `gh api` when available (handles auth + TLS cleanly), falls back to urllib + certifi when not. Supports --check for CI drift detection. - README.md: gets a sentinel-bracketed `<!-- recent-updates:start --> ... <!-- recent-updates:end -->` block the script regenerates surgically — never touches the surrounding content. Latest 5 releases with tag, date, link. - website/docs/releases.md: full 60-release history, grouped by minor version, each release body inside a collapsible `<details>` block. Now shows the real v9.7.0 → v4.0.0 span. - .github/workflows/sync-releases.yml: triggers the sync on every release event (published/edited/unpublished/deleted), daily at 11:00 UTC (catches out-of-band edits), and on workflow_dispatch. Commits directly to beta with [skip ci]. PRs run --check only. - /contributing/docs page: new "Release notes sync" section documenting the do-not-edit contract for releases.md and the recent-updates block, plus the manual sync commands. Verified: sync ran end-to-end via `gh api`, renders 60 releases into 1304 lines of releases.md + 5 entries in the README block. npm run build passes.
- docusaurus.config.js: count *.Configurator.cs files in MCPForUnity/Editor/Clients/Configurators/ at build time, expose via siteConfig.customFields.supportedClientCount. No hand-maintained constant to forget — the homepage stats row stays accurate forever. Current count: 21. - HomeStats: reads the count via useDocusaurusContext. Replaces the "12+" hardcode with the real number. - HomeHero tagline + README intro + Overview doc intro: replace "Claude, Claude Code, Cursor, VS Code, Windsurf" with the more representative "Claude, Codex, VS Code, local LLMs, and more" — reflects the actual client lineup that matters today. Verified live: stats row reads "21 MCP clients supported"; hero tagline reads "Claude, Codex, VS Code, local LLMs, and more".
Reworks the homepage and shared chrome into a "terminal meets blueprint" aesthetic — mono microcopy as a deliberate signal, hairline borders, dot-grid backdrop, no rounded blobs. Landing components (new + reworked): - HomeHero: status-pill eyebrow (live OPERATIONAL · v9.7.0 with a pulsing green dot), confident "Run the Unity Editor with your AI assistant." headline with an indigo marker-highlight on "AI assistant", terminal-style install block with STABLE + BETA channels and per-channel Copy buttons, refined demo frame - HomeStats: spec-sheet treatment (// SPEC at a glance) with mono numbers and labels in a hairline grid. 21 clients (dynamic count) - HomeArchitecture (NEW): three-stage flow MCP client → Python server → Unity Editor with mono edge labels (`stdio · HTTP /mcp`, `WebSocket · /hub/plugin`) and a filled-vs-outlined legend - HomeFeatures: numbered index cards (01 CONTROL, 02 ROUTING, …) with hairline borders only and mono kicker labels - HomeCloser (NEW): closing CTA strip + uncollapsed research citation block with full bibtex - CopyButton (NEW): reusable clipboard component with check-feedback, used by the install block Asset pipeline: - building_scene.gif (2.1 MB) → MP4 (274 KB) + WebM (290 KB), wrapped in <video autoplay loop muted playsInline> with format fallback - logo-mark.svg + logo-mark-dark.svg: minimal "bridge" mark (filled node → line → outlined node), tight 40×16 viewBox so it fills the navbar height crisply at any DPI - social-card.png: regenerated 1200×630 (52 KB) via headless Chrome from a Satoshi/JetBrains-Mono HTML template — corner crosshairs, status pill, headline, spec line, URL Navbar polish (docusaurus.config.js + custom.css): - GitHub + Discord become icon-only links via mask-image + background-color: currentColor (no filter-blur artifacts, theme- aware). Reference + Releases promoted to left items - Day/night toggle + GitHub + Discord all share 40×40 box and 0.2rem margin so the right cluster sits on an even rhythm - Search bar absolute-positioned to the centre of the navbar with refined ⌘K kbd pill hints (system font for crisp ⌘ glyph, 22px tall, 2px bottom border for Linear/Vercel-style physicality, fades on focus) Theme contrast hardening (custom.css): - Pinned --ifm-heading-color (was 'inherit') and --ifm-background-color (was '#0000' — transparent — in light mode). Buttons and link colors that resolved through these vars were rendering invisible - Architecture filled stages softened from solid heading-black to emphasis-200 cards with hairline borders - Cmd+K hint kbds switched from JetBrains Mono (fuzzy ⌘ glyph) to system font, with refined Linear-style chrome - dot-grid backdrop helper on the hero + closer sections Footer: dropped the Asset Store link (lived in the More column), kept GitHub + PyPI.
Hand-written examples on five high-traffic tool pages (preserved across regeneration by the generator) and a proper nested Tools sidebar so groups are collapsible categories instead of a flat list. Examples (in <!-- examples:start --><!-- examples:end --> blocks): - manage_gameobject: create primitives, modify (move + reparent), delete by tag, duplicate, multi-instance routing - manage_scene: load, paged get_hierarchy, save, create from template, additive multi-scene editing - manage_material: create, assign to renderer, set_material_shader_property, tint via MaterialPropertyBlock (mode: property_block) for batching - manage_script: REWRITTEN to match the tool's actual surface (create / read / delete only). The previous draft conflated it with script_apply_edits / validate_script — those examples moved to: - script_apply_edits: replace_method, insert_method (with position anchor), delete_method, anchor_insert (regex anchor), multi-op atomic transaction - batch_execute: 9-op spawn-three-colored-cubes payload, parallel/ fail_fast semantics, batch-size limits Generator fixes (tools/generate_docs_reference.py): - Examples-preservation regex now requires markers at line boundaries (re.MULTILINE + ^/$ anchors). Previously the generator's own warning banner referenced the literal `<!-- examples:start --><!-- examples:end -->` strings and the lazy regex matched THOSE first — capturing empty content and overwriting real examples with the placeholder - --check mode now reads existing examples from the committed location (passes `examples_source=TOOLS_OUT`) instead of the empty tempdir, so CI drift detection no longer false-positives every run - Emits `_category_.json` per group dir + a sidebar_class_name on the catalog index — Docusaurus then renders Tools → group → tool as a proper nested tree, with the duplicate catalog-as-child entry CSS-hidden via .sidebar-hidden Sidebar (sidebars.js): - Reference > Tools is now a single category, link points to the catalog index, items autogenerate from website/docs/reference/tools/ using the new `_category_.json` metadata for nesting Verified: build clean, generator --check exits 0, examples survive end-to-end regeneration round-trip.
Flattens the <details>/<summary> wrapper into a top-level "## Citation" section with a one-line lead, the venue (SA Technical Communications '25, ACM) as a DOI link, and the bibtex below. Same intent as the homepage's HomeCloser citation block — make the paper findable without a click and signal that this is a research-grade project. Also re-indents the bibtex for readability (column-aligned fields).
…e license - Badge: shorten label from "Docs · coplaydev.github.io/unity-mcp" to just "Docs · unity-mcp". Cleaner badge row, link unchanged. - "Read the Docs" section: drop the redundant "Getting Started · Tool Reference · Architecture · Contributing" one-liner under the link — visitors hit the docs site and see the full sidebar there. - Citation: expand from one paragraph + bibtex to a structured block with paper info (venue, DOI, ISBN), an APA-format plain-text citation, and a cleaned-up BibTeX key (wu2025mcpunity). Lower friction for non-LaTeX users. - License: moved from mid-document to the very bottom, after Disclaimer. Standard placement for license attribution.
Citation: trimmed to bibtex only — the paper info paragraph and APA plain-text citation were nice-to-have but added vertical noise. The bibtex carries enough metadata for both code search and academic use. Hosting move (Scriptwonder fork preview): - docusaurus.config.js: url + organizationName flipped to Scriptwonder - docs-deploy.yml: deploy on push to `docs/v2-wiki-refresh` OR `beta` (Setup Pages, Upload artifact, Deploy job conditions all updated). Lets the live preview at scriptwonder.github.io/unity-mcp update as we iterate, without waiting for an upstream maintainer to enable Pages on CoplayDev/unity-mcp. - Hardcoded URLs in README.md, website/README.md, website/static/ robots.txt swapped from coplaydev.github.io/unity-mcp to scriptwonder.github.io/unity-mcp via a one-shot sed. - docs.md + website/README.md retain a one-line note about flipping back to coplaydev once upstream Pages is enabled. After push, to make the preview actually serve: - Settings → Pages → Source → "GitHub Actions" on https://github.com/Scriptwonder/unity-mcp/settings/pages The deploy job in the next push will then provision Pages on first run.
Pages is now enabled on CoplayDev/unity-mcp, so the canonical preview URL is back to https://coplaydev.github.io/unity-mcp/. - docusaurus.config.js: url + organizationName back to CoplayDev - docs-deploy.yml: deploy condition narrowed back to push-to-beta only (drops the temporary docs/v2-wiki-refresh trigger) - README.md, website/README.md, website/static/robots.txt, website/docs/contributing/docs.md: hardcoded scriptwonder URLs swept back to coplaydev, and the temporary "Scriptwonder fork preview" / "flips back to coplaydev" prose removed Next deploy of the live site happens when this lands on upstream/beta (via PR merge) and triggers the existing workflow.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdds a Docusaurus-based docs site, many new/updated documentation pages, autogenerated tool/resource reference generation and preservation, CI workflows for docs build/generation/release sync, a docs generator and pre-commit hook, website code/components/styles, issue templates, CODE_OF_CONDUCT/SECURITY/CONTRIBUTING, README overhaul, and release note sync tooling. ChangesDocumentation system and content
Estimated code review effort: Possibly related PRs:
Suggested labels: Suggested reviewers:
✨ Finishing Touches🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
Pull request overview
This PR introduces a full Docusaurus documentation site for the repo (as part of the rebrand/refresh), including a custom marketing homepage, a generated MCP tool reference section, and supporting automation (hooks + GitHub Actions) to keep docs and release notes in sync.
Changes:
- Adds a Docusaurus site under
website/with a new homepage and static assets (logos, media, robots/sitemap support). - Adds a large set of docs pages (Getting Started, Guides, Architecture, Reference) including generated tool reference pages.
- Adds maintenance automation: pre-commit hook for regenerating reference docs, docs build/deploy + drift-check workflows, release-notes sync workflow, plus community health files (SECURITY/CONTRIBUTING/CoC/issue templates).
Reviewed changes
Copilot reviewed 121 out of 149 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| website/static/robots.txt | Robots + sitemap for GitHub Pages docs site. |
| website/static/img/logo-mark.svg | Light logo mark for site UI. |
| website/static/img/logo-mark-dark.svg | Dark logo mark for site UI. |
| website/static/.nojekyll | Disables Jekyll processing on GitHub Pages. |
| website/src/pages/index.js | Docusaurus homepage composition. |
| website/src/components/HomeStats/styles.module.css | Styling for homepage “spec sheet” stats section. |
| website/src/components/HomeStats/index.js | Stats component (tool/resource counts, Unity range). |
| website/src/components/HomeHero/index.js | Homepage hero with install commands + demo media. |
| website/src/components/HomeFeatures/styles.module.css | Styling for homepage feature cards grid. |
| website/src/components/HomeFeatures/index.js | Homepage capabilities/features card grid. |
| website/src/components/HomeCloser/styles.module.css | Styling for closing CTA + citation block. |
| website/src/components/HomeCloser/index.js | Closing CTA, outbound links, and citation block. |
| website/src/components/HomeArchitecture/index.js | Homepage architecture “diagram” section. |
| website/src/components/CopyButton/styles.module.css | Styling for copy-to-clipboard button. |
| website/src/components/CopyButton/index.js | Copy-to-clipboard button implementation. |
| website/sidebars.js | Site information architecture (sidebar structure). |
| website/README.md | Local dev/build instructions for the docs site. |
| website/package.json | Docusaurus/React dependencies and scripts. |
| website/docs/reference/tools/vfx/manage_vfx.md | Generated tool reference page (vfx). |
| website/docs/reference/tools/vfx/manage_texture.md | Generated tool reference page (vfx). |
| website/docs/reference/tools/vfx/manage_shader.md | Generated tool reference page (vfx). |
| website/docs/reference/tools/vfx/index.md | vfx group landing page. |
| website/docs/reference/tools/vfx/category.json | Docusaurus category metadata (vfx). |
| website/docs/reference/tools/ui/manage_ui.md | Generated tool reference page (ui). |
| website/docs/reference/tools/ui/index.md | ui group landing page. |
| website/docs/reference/tools/ui/category.json | Docusaurus category metadata (ui). |
| website/docs/reference/tools/testing/run_tests.md | Generated tool reference page (testing). |
| website/docs/reference/tools/testing/index.md | testing group landing page. |
| website/docs/reference/tools/testing/get_test_job.md | Generated tool reference page (testing). |
| website/docs/reference/tools/testing/category.json | Docusaurus category metadata (testing). |
| website/docs/reference/tools/scripting_ext/manage_scriptable_object.md | Generated tool reference page (scripting_ext). |
| website/docs/reference/tools/scripting_ext/index.md | scripting_ext group landing page. |
| website/docs/reference/tools/scripting_ext/execute_code.md | Generated tool reference page (scripting_ext). |
| website/docs/reference/tools/scripting_ext/category.json | Docusaurus category metadata (scripting_ext). |
| website/docs/reference/tools/profiling/manage_profiler.md | Generated tool reference page (profiling). |
| website/docs/reference/tools/profiling/index.md | profiling group landing page. |
| website/docs/reference/tools/profiling/category.json | Docusaurus category metadata (profiling). |
| website/docs/reference/tools/probuilder/manage_probuilder.md | Generated tool reference page (probuilder). |
| website/docs/reference/tools/probuilder/index.md | probuilder group landing page. |
| website/docs/reference/tools/probuilder/category.json | Docusaurus category metadata (probuilder). |
| website/docs/reference/tools/index.md | Generated catalog of all tools by group. |
| website/docs/reference/tools/docs/unity_reflect.md | Generated tool reference page (docs). |
| website/docs/reference/tools/docs/unity_docs.md | Generated tool reference page (docs). |
| website/docs/reference/tools/docs/index.md | docs group landing page. |
| website/docs/reference/tools/docs/category.json | Docusaurus category metadata (docs). |
| website/docs/reference/tools/core/validate_script.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/set_active_instance.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/refresh_unity.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/read_console.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_tools.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_script.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_script_capabilities.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_scene.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_prefabs.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_physics.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_packages.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_material.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_graphics.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_editor.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_components.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_camera.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_build.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/manage_asset.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/index.md | core group landing page. |
| website/docs/reference/tools/core/get_sha.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/find_in_file.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/find_gameobjects.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/execute_menu_item.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/execute_custom_tool.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/delete_script.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/debug_request_context.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/create_script.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/batch_execute.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/apply_text_edits.md | Generated tool reference page (core). |
| website/docs/reference/tools/core/category.json | Docusaurus category metadata (core). |
| website/docs/reference/tools/animation/manage_animation.md | Generated tool reference page (animation). |
| website/docs/reference/tools/animation/index.md | animation group landing page. |
| website/docs/reference/tools/animation/category.json | Docusaurus category metadata (animation). |
| website/docs/reference/manifest.md | Narrative reference for repo-root manifest.json. |
| website/docs/reference/cli.md | Narrative CLI reference and tool mapping. |
| website/docs/migrations/v8.md | Fixes image/link paths to match site static assets. |
| website/docs/migrations/v6.md | Fixes image paths to /img/... static paths. |
| website/docs/migrations/v5.md | Fixes image paths to /img/... static paths. |
| website/docs/guides/uv-setup.md | Guide for uv/Python installation and repair. |
| website/docs/guides/tool-groups.md | Explains tool group visibility + manage_tools. |
| website/docs/guides/roslyn.md | Guide for enabling Roslyn validation. |
| website/docs/guides/multi-instance.md | Guide for multi-instance routing and set_active_instance. |
| website/docs/guides/cli-examples.md | Adds frontmatter + normalizes CLI examples doc. |
| website/docs/guides/claude-code-cli.md | Guide for Claude Code CLI install/repair. |
| website/docs/getting-started/install.md | Install instructions + client configuration snippets. |
| website/docs/getting-started/index.md | Getting started overview landing page. |
| website/docs/getting-started/first-prompt.md | First end-to-end prompt walkthrough. |
| website/docs/getting-started/clients.md | Client capability matrix + selection guidance. |
| website/docs/contributing/testing.md | How to run Python/Unity tests + CI explanation. |
| website/docs/contributing/releases.md | Maintainer release workflow checklist. |
| website/docs/contributing/dev-setup.md | Contributor dev setup guide (site copy). |
| website/docs/architecture/unity-compat.md | Unity compatibility shim policy doc. |
| website/docs/architecture/transports.md | HTTP vs stdio transport modes doc. |
| website/docs/architecture/telemetry.md | Telemetry policy/implementation documentation. |
| website/docs/architecture/python-layers.md | Explains tools/CLI/resources layering. |
| website/docs/architecture/project-roadmap.md | Roadmap overview and links. |
| website/docs/architecture/manage-physics.md | Detailed manage_physics architecture note. |
| website/.gitignore | Ignores node/build artifacts for docs site. |
| tools/hooks/pre-commit | Hook to regenerate reference docs on staged tool/resource changes. |
| SECURITY.md | Adds security policy and safe-by-default network posture. |
| docs/guides/CURSOR_HELP.md | Removes legacy Cursor help (migrated into site). |
| CONTRIBUTING.md | Adds contributor guidelines and repo conventions. |
| CODE_OF_CONDUCT.md | Adds Contributor Covenant code of conduct. |
| .github/workflows/sync-releases.yml | Automates syncing release notes into docs/README. |
| .github/workflows/docs-generate.yml | CI drift-check for generated reference docs. |
| .github/workflows/docs-deploy.yml | Builds (and deploys on beta) the Docusaurus site. |
| .github/ISSUE_TEMPLATE/feature_request.yml | New feature request issue form. |
| .github/ISSUE_TEMPLATE/config.yml | Issue template routing + contact links. |
| .github/ISSUE_TEMPLATE/bug_report.yml | New bug report issue form. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| - **[`find_in_file`](./core/find_in_file.md)** — Searches a file with a regex pattern and returns line numbers and excerpts | ||
| - **[`get_sha`](./core/get_sha.md)** — Get SHA256 and basic metadata for a Unity C# script without returning file contents | ||
| - **[`manage_asset`](./core/manage_asset.md)** — Performs asset operations (import, create, modify, delete, etc | ||
| - **[`manage_build`](./core/manage_build.md)** — Manage Unity player builds — trigger builds, switch platforms, configure settings, manage build scenes and profiles, run batch builds across platforms | ||
| - **[`manage_camera`](./core/manage_camera.md)** — Manage cameras (Unity Camera + Cinemachine) |
| - **[`find_in_file`](./find_in_file.md)** — Searches a file with a regex pattern and returns line numbers and excerpts | ||
| - **[`get_sha`](./get_sha.md)** — Get SHA256 and basic metadata for a Unity C# script without returning file contents | ||
| - **[`manage_asset`](./manage_asset.md)** — Performs asset operations (import, create, modify, delete, etc | ||
| - **[`manage_build`](./manage_build.md)** — Manage Unity player builds — trigger builds, switch platforms, configure settings, manage build scenes and profiles, run batch builds across platforms | ||
| - **[`manage_camera`](./manage_camera.md)** — Manage cameras (Unity Camera + Cinemachine) |
| | Name | Type | Required | Description | | ||
| |------|------|----------|-------------| | ||
| | `menu_path` | `str \| None` | — | Menu path for 'execute' or 'exists' (e.g., 'File/Save Project') | | ||
|
|
|
|
||
| ## Requirements | ||
|
|
||
| You need **Python 3.12+** and the **`uv`** package manager. |
| python3 --version # should be 3.12+ | ||
| uv --version # should print a version like "uv 0.x" |
| import React, { useState } from 'react'; | ||
| import styles from './styles.module.css'; | ||
|
|
||
| /** | ||
| * Minimal "copy to clipboard" button. Shows a 1.5s confirmation state | ||
| * after a successful copy. Falls back silently when the Clipboard API | ||
| * isn't available (older browsers, insecure contexts) — the user can | ||
| * still select-and-copy manually. | ||
| */ | ||
| export default function CopyButton({ text, label = 'Copy', className }) { | ||
| const [copied, setCopied] = useState(false); | ||
|
|
| setCopied(true); | ||
| setTimeout(() => setCopied(false), 1500); | ||
| } catch { |
| </p> | ||
| </div> | ||
|
|
||
| <div className={styles.diagram} aria-label="MCP for Unity architecture diagram"> |
| on: | ||
| release: | ||
| types: [published, edited, unpublished, deleted] | ||
| workflow_dispatch: {} | ||
| schedule: | ||
| # 11:00 UTC daily — picks up any out-of-band edits to release bodies. | ||
| - cron: '0 11 * * *' | ||
|
|
| --- | ||
| title: manage_asset | ||
| sidebar_label: manage_asset | ||
| description: "Performs asset operations (import, create, modify, delete, etc" | ||
| --- |
There was a problem hiding this comment.
Actionable comments posted: 15
🧹 Nitpick comments (23)
website/src/components/HomeCloser/styles.module.css (1)
90-95: ⚡ Quick winUse theme variable instead of hard-coded color.
Line 92 uses a hard-coded
#fffffffor the hover text color, which breaks the consistent use of Docusaurus theme variables found elsewhere in the codebase. This could cause contrast issues in dark mode or with custom themes.♻️ Recommended fix
.ctaPrimary:hover { background: var(--ifm-color-primary); - color: `#ffffff`; + color: var(--ifm-color-emphasis-0); text-decoration: none; transform: translateY(-1px); }This matches the pattern established at lines 81-86 where
--ifm-color-emphasis-0is explicitly used as the "solid background" color that contrasts with foreground.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/src/components/HomeCloser/styles.module.css` around lines 90 - 95, Replace the hard-coded hover text color in the .ctaPrimary:hover rule — currently set to `#ffffff` — with the theme variable used elsewhere (e.g., var(--ifm-color-emphasis-0)); update the .ctaPrimary:hover selector to use var(--ifm-color-emphasis-0) so it matches the pattern used in the .ctaPrimary base styles and preserves theme/dark-mode consistency..github/workflows/docs-deploy.yml (2)
31-34: ⚖️ Poor tradeoffScope permissions to the job level, not workflow level.
The
pages: writeandid-token: writepermissions are only needed in thedeployjob, but are granted at the workflow level. This violates the principle of least privilege—thebuildjob runs with unnecessary write permissions.🔒 Proposed fix to scope permissions
-permissions: - contents: read - pages: write - id-token: write +permissions: + contents: readThen add permissions to the deploy job:
deploy: name: Deploy to GitHub Pages needs: build if: github.event_name == 'push' && github.ref == 'refs/heads/beta' runs-on: ubuntu-latest + permissions: + pages: write + id-token: write environment:🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/docs-deploy.yml around lines 31 - 34, Remove the broad workflow-level write permissions for pages and id-token and leave only contents: read at the top-level; then add scoped permissions pages: write and id-token: write to the specific deploy job (the job named "deploy") so only that job gets write access while the build job runs with minimal permissions. Ensure you update the permissions block in the deploy job to include pages: write and id-token: write and remove those keys from the workflow-level permissions.
46-46: ⚖️ Poor tradeoffConsider pinning actions to commit SHAs for supply-chain security.
The workflow uses version tags (
@v4,@v5) instead of commit SHAs. While more readable, this exposes the workflow to tag-rewriting attacks where a malicious actor with access to the action's repository could point the tag to compromised code.Example pinned reference:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1Tools like pin-github-action can automate this conversion while preserving readability via comments.
Also applies to: 54-54, 66-66, 74-74, 89-89
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/docs-deploy.yml at line 46, Replace version tags with pinned commit SHAs for all "uses:" entries (e.g., the actions/checkout@v4 reference and the other uses at the same workflow) to mitigate tag-rewrite supply-chain risks: locate each "uses: actions/checkout@...", "uses: <other-action>`@vX`" occurrence and replace the tag with the corresponding full commit SHA (optionally leaving the human-friendly tag as a comment), or run a tool like pin-github-action to generate the exact SHA; ensure every occurrence mentioned in the review (the actions at the shown locations) is updated so the workflow references immutable commit SHAs instead of floating tags..github/workflows/sync-releases.yml (1)
41-47: ⚡ Quick winAdd
persist-credentials: falseor document why the token must persist.The checkout step uses
token: ${{ secrets.GITHUB_TOKEN }}but does not setpersist-credentials: false. Since this job needs to push commits (line 70), the token must persist. However, consider whether using the defaultGITHUB_TOKENbehavior (which persists by default) is intentional or if an explicit token is needed.If the explicit token at line 47 is unnecessary (since
GITHUB_TOKENis the default), remove it:with: ref: beta fetch-depth: 0 - token: ${{ secrets.GITHUB_TOKEN }}If the token is required for pushing, add a comment explaining why credentials must persist:
ref: beta fetch-depth: 0 + # Token must persist for git push in "Commit & push" step token: ${{ secrets.GITHUB_TOKEN }}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/sync-releases.yml around lines 41 - 47, The checkout step using actions/checkout@v4 currently passes token: ${{ secrets.GITHUB_TOKEN }} but doesn't set persist-credentials; either remove the explicit token if you rely on the default behavior, or make the intent explicit: if the job must push commits (the later push step), keep the token and add persist-credentials: true (and a brief comment explaining "credentials must persist for push"), otherwise set persist-credentials: false to avoid persisting credentials; update the Checkout beta block (ref: beta, fetch-depth: 0, token) accordingly to reflect the chosen behavior and comment.tools/generate_docs_reference.py (1)
84-84: 💤 Low valueRuff doesn't recognize the WPS433 rule code.
The
# noqa: WPS433comment references a wemake-python-styleguide rule that Ruff doesn't know about. If you're using wemake-python-styleguide elsewhere, addWPS433to Ruff'slint.externalconfiguration. Otherwise, remove the WPS-specific code.♻️ Suggested fix
- from services.registry import ( # noqa: WPS433 (deferred import by design) + from services.registry import ( # deferred import by design🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tools/generate_docs_reference.py` at line 84, The import line "from services.registry import ( # noqa: WPS433 (deferred import by design)" references a wemake-specific rule that Ruff doesn't understand; either remove the "WPS433" from the trailing noqa comment on that import or add "WPS433" to Ruff's lint.external configuration so Ruff knows to ignore it. Locate the import statement for services.registry in generate_docs_reference.py and either delete the "WPS433" token from the "# noqa" comment or update your Ruff config (lint.external) to include "WPS433" so linting stops flagging it.website/docs/architecture/python-layers.md (1)
35-39: 💤 Low valueAdd language specifier to fenced code block.
The code block should specify a language (e.g.,
textor leave empty triple-backticks for plain text) to satisfy markdown linting rules and improve rendering consistency.📝 Suggested fix
-``` +```text Server/src/services/tools/manage_navigation.py # `@mcp_for_unity_tool` Server/src/cli/commands/navigation.py # `@click.command` MCPForUnity/Editor/Tools/ManageNavigation.cs # [McpForUnityTool]</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@website/docs/architecture/python-layers.mdaround lines 35 - 39, The fenced
code block in the markdown lacks a language specifier; update the opening fence
fromtotext (or another explicit spec like ```plain) so the block
containing the file lines (Server/src/services/tools/manage_navigation.py,
Server/src/cli/commands/navigation.py,
MCPForUnity/Editor/Tools/ManageNavigation.cs) is marked as text and satisfies
the markdown linter and renderer.</details> </blockquote></details> <details> <summary>website/docs/reference/resources/index.md (1)</summary><blockquote> `14-20`: _⚡ Quick win_ **Remove duplicate URI lines throughout the document.** Each resource entry displays the URI twice—once in the `**URI:**` line and again as plain text immediately below. This duplication appears in all 20+ resource entries (lines 20, 29, 38, 47, 56, 65, 74, 83, 95, 107, 120, 136, 144, 156, 165, 177, 189, 201, 210, 219). Removing the plain-text repetitions would improve readability. <details> <summary>♻️ Example fix for the cameras resource</summary> ```diff ## `cameras` **URI:** `mcpforunity://scene/cameras` List all cameras in the scene (Unity Camera + CinemachineCamera) with status. Includes Brain state, Cinemachine camera priorities, pipeline components, follow/lookAt targets, and Unity Camera info. - -URI: mcpforunity://scene/cameras - ``` Apply the same pattern to all other resource entries. </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/resources/index.md` around lines 14 - 20, Remove the duplicated plain-text URI that appears immediately below the bold "**URI:**" line for each resource entry (e.g., in the `## \`cameras\`` section where you currently have both "**URI:** \`mcpforunity://scene/cameras\`" and then a repeat "URI: mcpforunity://scene/cameras"); keep only the bold "**URI:**" line and delete the subsequent repeated plain-text URI for all resource headings throughout the document (apply the same change to the other resource sections that repeat their URIs). ``` </details> </blockquote></details> <details> <summary>website/docs/reference/tools/core/index.md (2)</summary><blockquote> `21-21`: _⚡ Quick win_ **Complete the truncated description and add period after "etc."** The description appears cut off: "delete, etc" should either continue or properly close with "etc.)". As per American English conventions, "etc" requires a period. <details> <summary>📝 Suggested fix</summary> ```diff -- **[`manage_asset`](./manage_asset.md)** — Performs asset operations (import, create, modify, delete, etc +- **[`manage_asset`](./manage_asset.md)** — Performs asset operations (import, create, modify, delete, etc.) ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/tools/core/index.md` at line 21, The manage_asset entry is truncated and missing the final period; update the description for `manage_asset` (symbol: manage_asset) to complete the sentence and close the parenthesis, e.g., change "Performs asset operations (import, create, modify, delete, etc" to a full phrase like "Performs asset operations (import, create, modify, delete, etc.)" or expand "etc." into a short list, and ensure the line ends with a period and a closing parenthesis. ``` </details> --- `28-28`: _⚡ Quick win_ **Add period after "etc."** American English conventions require a period after "etc." <details> <summary>📝 Suggested fix</summary> ```diff -- **[`manage_material`](./manage_material.md)** — Manages Unity materials (set properties, colors, shaders, etc) +- **[`manage_material`](./manage_material.md)** — Manages Unity materials (set properties, colors, shaders, etc.) ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/tools/core/index.md` at line 28, Update the markdown entry for the tool label **manage_material** to add the missing period after "etc" so the description reads "...shaders, etc."; locate the line containing "**[`manage_material`](./manage_material.md)** — Manages Unity materials (set properties, colors, shaders, etc)" and append the period. ``` </details> </blockquote></details> <details> <summary>website/docs/reference/tools/core/debug_request_context.md (1)</summary><blockquote> `23-23`: _⚡ Quick win_ **Make the return description specific to this tool.** The generic "exact shape depends on the action" text is unhelpful here. Since the description explicitly states this tool returns "client_id, session_id, and meta dump", document the actual return shape or at least describe which fields are returned. <details> <summary>📝 Suggested improvement</summary> ```diff -A `dict` containing the Unity response. The exact shape depends on the action. +A `dict` containing `client_id`, `session_id`, and a `meta` dump from the current FastMCP request context. ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/tools/core/debug_request_context.md` at line 23, Update the return description for the debug_request_context tool to be specific: replace the generic "A `dict` containing the Unity response. The exact shape depends on the action." with a clear schema listing the fields returned (e.g., client_id: string, session_id: string, meta_dump: dict/JSON with arbitrary metadata) and note any optional fields or types; reference the tool name debug_request_context in the doc so readers know this description applies to that tool. ``` </details> </blockquote></details> <details> <summary>website/docs/reference/tools/core/execute_custom_tool.md (1)</summary><blockquote> `19-22`: _⚡ Quick win_ **Add parameter descriptions.** Both `tool_name` and `parameters` lack descriptions. Users need to know what format/values are expected for custom tool names and what structure `parameters` should have. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/tools/core/execute_custom_tool.md` around lines 19 - 22, Add descriptive text for both parameters: explain that `tool_name` is the identifier of the custom tool to invoke (a string matching registered tool IDs or function names, case-sensitive, e.g., "translate_text" or "weather.lookup") and what naming conventions/valid values are permitted; and describe `parameters` as an optional mapping from parameter names (strings) to JSON-serializable values (primitives, lists, nested dicts) that the tool expects, noting required vs optional parameter keys, how to pass null/omit parameters, and any type/format constraints (e.g., date strings, enums) so users know the expected structure and examples of typical entries. ``` </details> </blockquote></details> <details> <summary>website/docs/reference/tools/core/manage_script_capabilities.md (1)</summary><blockquote> `16-28`: _⚡ Quick win_ **Inconsistent return value documentation structure.** Lines 16-20 embed the specific return fields (`ops`, `text_ops`, `max_edit_payload_bytes`, `guards`) in the Description section, while the Returns section (line 28) contains only the generic "depends on the action" text. Other tool docs keep the Description focused on behavior and place specific return shapes in the Returns section. Consider updating the generator to move these field details to the Returns section for consistency and better scannability. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/tools/core/manage_script_capabilities.md` around lines 16 - 28, Move the specific return-field bullets (ops, text_ops, max_edit_payload_bytes, guards) out of the Description block and into the Returns section so the Returns section lists the exact dict shape; update the generator/template that produces manage_script_capabilities.md to emit those field descriptions under the "Returns" heading (as a bullet list describing each key and its meaning) and leave the Description focused on behavior only. ``` </details> </blockquote></details> <details> <summary>website/docs/reference/tools/core/manage_prefabs.md (1)</summary><blockquote> `15-15`: _⚡ Quick win_ **Consider breaking up the dense description.** The description paragraph is over 600 characters and packs multiple concepts (headless vs interactive editing, child creation/deletion syntax, component properties, object references, and search tips) into a single block. This makes it harder for users to quickly find specific information. Consider refactoring the generator to structure this as: - A brief overview sentence - Bulleted operation categories - Separate sub-sections or paragraphs for complex concepts (child management, component properties) <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/tools/core/manage_prefabs.md` at line 15, The single dense paragraph in manage_prefabs.md should be split into a short overview sentence followed by clear, scoped sections: a bulleted list of supported actions (get_info, get_hierarchy, create_from_gameobject, modify_contents, open_prefab_stage, save_prefab_stage, close_prefab_stage), a short paragraph describing the two editing approaches (Headless via modify_contents vs Interactive via open_prefab_stage → manage_gameobject/manage_components → save_prefab_stage/close_prefab_stage), and separate sub-sections for child management (create_child/delete_child examples) and component handling (component_properties and object reference formats {"guid":...}, {"path":...}, {"instanceID":...}); keep the manage_asset search tip as a one-line note. Ensure each concept is its own paragraph or bullet so users can scan quickly. ``` </details> </blockquote></details> <details> <summary>website/docs/reference/tools/index.md (1)</summary><blockquote> `31-31`: _💤 Low value_ **Minor style: "etc" should be "etc." in American English.** The abbreviation "etc" appears without a period on lines 31 and 38. Since this is auto-generated content, the fix should be applied in the generator template (`tools/generate_docs_reference.py`) rather than hand-editing this file. <details> <summary>✏️ Generator template fix needed</summary> Update the description templates in `tools/generate_docs_reference.py` to use `etc.` instead of `etc`: Line 31: `"etc"` → `"etc."` Line 38: `"etc"` → `"etc."` </details> Also applies to: 38-38 <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/tools/index.md` at line 31, The generated docs use "etc" without a period; update the generator templates in tools/generate_docs_reference.py to change the description strings that include "etc" to "etc." (e.g., the templates that produce the manage_asset and related tool descriptions) so the output reads "etc." in both places; locate the description/template variables or functions in generate_docs_reference.py that build those tool description lines and replace "etc" with "etc.". ``` </details> </blockquote></details> <details> <summary>website/docs/getting-started/first-prompt.md (1)</summary><blockquote> `44-48`: _💤 Low value_ **Optional: Remove blank lines inside blockquotes.** Markdown linters flag blank lines within blockquotes as a style issue. Consider removing the blank lines between the blockquote prompts for cleaner formatting. <details> <summary>♻️ Proposed fix</summary> ```diff > Add a directional light if there isn't one, and a perspective camera positioned at (0, 2, -5) looking at the cubes. - > Write a C# script that makes the red cube oscillate up and down by 0.5 units, attach it to the red cube, and enter Play mode. - > Run all tests in EditMode and report which ones fail. ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/getting-started/first-prompt.md` around lines 44 - 48, Remove the blank lines inside the blockquote containing the three prompts so there are no empty lines between each '>' line; edit the blockquoted lines starting with "Add a directional light...", "Write a C# script...", and "Run all tests..." to be consecutive blockquote lines (each prefixed with '>') without intervening blank lines to satisfy the markdown linter. ``` </details> </blockquote></details> <details> <summary>website/docs/getting-started/install.md (1)</summary><blockquote> `59-63`: _💤 Low value_ **Optional: Remove blank lines inside blockquotes.** Similar to first-prompt.md, the blank lines between blockquote examples are flagged by markdown linters. <details> <summary>♻️ Proposed fix</summary> ```diff > Create a red, blue, and yellow cube in the current scene. - > Build a simple player controller with WASD movement and a double-jump. - > List every script in `Assets/Scripts` and tell me which ones reference `Rigidbody`. ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/getting-started/install.md` around lines 59 - 63, Remove the extra blank lines within the blockquote examples so each quoted item is contiguous; in the block containing the three examples ("Create a red, blue, and yellow cube in the current scene.", "Build a simple player controller with WASD movement and a double-jump.", "List every script in `Assets/Scripts` and tell me which ones reference `Rigidbody`.") collapse any blank lines between them so they form a single continuous blockquote without internal empty lines to satisfy markdown linters. ``` </details> </blockquote></details> <details> <summary>website/docs/guides/multi-instance.md (1)</summary><blockquote> `44-46`: _💤 Low value_ **Optional: Add language identifiers to fenced code blocks.** The code blocks showing tool call examples don't have language specifiers. Adding `text` or `bash` would satisfy markdown linters and improve syntax highlighting consistency. <details> <summary>♻️ Example fix for line 44</summary> ```diff -``` +```text set_active_instance(instance="MyGame@a1b2c3d4") ``` ``` </details> Also applies to: 52-55, 61-63 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@website/docs/guides/multi-instance.mdaround lines 44 - 46, Add language
identifiers to the fenced code blocks that show tool call examples (e.g., the
block containing set_active_instance(instance="MyGame@a1b2c3d4") and the other
examples at the same section) by replacing the opening triple backticks with a
language tag liketext orbash so markdown linters pick them up and syntax
highlighting is consistent; update each fenced block showing command/tool usage
(including the blocks around set_active_instance and the subsequent examples)
accordingly.</details> </blockquote></details> <details> <summary>website/docs/guides/troubleshooting.md (1)</summary><blockquote> `184-184`: _⚡ Quick win_ **Add final newline.** Markdown files should end with a blank line for consistency. <details> <summary>📝 Suggested fix</summary> ```diff A: Some Windows machines have multiple `uv.exe` locations. Auto-config sometimes picks a less stable path, causing the launch to fail or auto-rewrite on every restart. Use **"Choose UV Install Location"** in the MCP for Unity window and pin the **WinGet Links shim** path (`%LOCALAPPDATA%\Microsoft\WinGet\Links\uv.exe`) — it's stable across uv upgrades. + ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/guides/troubleshooting.md` at line 184, The file website/docs/guides/troubleshooting.md is missing a trailing newline; open that file and add a single blank line at the end (ensure the file ends with a final newline character) to satisfy the Markdown consistency requirement. ``` </details> </blockquote></details> <details> <summary>website/docs/reference/cli.md (1)</summary><blockquote> `97-97`: _⚡ Quick win_ **Add final newline.** Markdown files should end with a blank line for consistency. <details> <summary>📝 Suggested fix</summary> ```diff CLI command definitions: [`Server/src/cli/commands/`](https://github.com/CoplayDev/unity-mcp/tree/beta/Server/src/cli/commands). Entry point: [`Server/src/cli/main.py`](https://github.com/CoplayDev/unity-mcp/blob/beta/Server/src/cli/main.py). + ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/cli.md` at line 97, Add a final newline character at the end of the Markdown file (website/docs/reference/cli.md) so the file ends with a blank line; simply open the file and ensure the last line is followed by a single trailing newline (save the file) to satisfy the trailing-newline requirement. ``` </details> </blockquote></details> <details> <summary>website/docs/guides/tool-groups.md (2)</summary><blockquote> `35-37`: _⚡ Quick win_ **Add language specifiers to code blocks.** The code blocks showing `manage_tools` function calls should include a language identifier for proper syntax highlighting. <details> <summary>📝 Suggested fix</summary> ```diff -``` +```python manage_tools(action="activate", group="vfx") ``` ``` Apply the same change to the other two code blocks at lines 43 and 51. </details> As per coding guidelines, the markdownlint rule MD040 requires fenced code blocks to have a language specified. Also applies to: 43-45, 51-53 <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.In
@website/docs/guides/tool-groups.mdaround lines 35 - 37, Update the three
fenced code blocks that show manage_tools(...) calls to include a language
specifier (e.g., "python") so they satisfy MD040; locate the blocks containing
the calls to manage_tools(action="activate", group="vfx") and the two other
similar examples and prepend the opening fences with ```python to enable syntax
highlighting.</details> --- `81-81`: _⚡ Quick win_ **Add final newline.** Markdown files should end with a blank line for consistency. <details> <summary>📝 Suggested fix</summary> ```diff - [`tool_groups` resource](/reference/resources) — discoverable group catalog + ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/guides/tool-groups.md` at line 81, Add a trailing blank line at the end of the Markdown document (tool-groups.md) so the file ends with a single final newline character; simply open the file and ensure there is one empty line after the last content line, save the file, and verify the linter no longer flags a missing final newline. ``` </details> </blockquote></details> <details> <summary>website/docs/guides/uv-setup.md (1)</summary><blockquote> `111-111`: _⚡ Quick win_ **Add final newline.** Markdown files should end with a blank line for consistency. <details> <summary>📝 Suggested fix</summary> ```diff uv run server.py ``` + ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/guides/uv-setup.md` at line 111, Add a single trailing newline at the end of the Markdown document (uv-setup.md) so the file ends with a blank line/EOF newline; open the file, place one final blank line after the last content line and save so the file terminates with a newline character. ``` </details> </blockquote></details> <details> <summary>website/docs/reference/manifest.md (1)</summary><blockquote> `70-70`: _⚡ Quick win_ **Add final newline.** Markdown files should end with a blank line for consistency. <details> <summary>📝 Suggested fix</summary> ```diff The current `manifest.json` is at the repo root: [`manifest.json`](https://github.com/CoplayDev/unity-mcp/blob/beta/manifest.json). + ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/reference/manifest.md` at line 70, Add a trailing blank line at the end of the manifest.md file (ensure the file ends with a single final newline character) so the markdown file terminates with a blank line for consistency and tooling compatibility; simply open manifest.md and insert one final newline at EOF. ``` </details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.Inline comments:
In @.github/ISSUE_TEMPLATE/bug_report.yml:
- Line 13: Update the broken troubleshooting docs URL in the bug report template
by replacing the link path segment "guides/cursor" with "guides/troubleshooting"
in the .github/ISSUE_TEMPLATE/bug_report.yml content (leave the setup wiki link
unchanged); locate the string that reads
"https://coplaydev.github.io/unity-mcp/guides/cursor" and change it to
"https://coplaydev.github.io/unity-mcp/guides/troubleshooting".In @.github/workflows/docs-deploy.yml:
- Around line 45-51: The Checkout step using actions/checkout@v4 should
explicitly set persist-credentials: false to avoid leaving the GITHUB_TOKEN in
the workspace; update the "Checkout" job step (the step with uses:
actions/checkout@v4) to include a with: entry setting persist-credentials: false
alongside fetch-depth so credentials are not persisted to the checked-out
repository.In @.github/workflows/docs-generate.yml:
- Around line 39-40: Update the Checkout step that uses actions/checkout@v4 to
add persist-credentials: false so the GITHUB_TOKEN is not left in the
checked-out repository; locate the step named "Checkout" (uses:
actions/checkout@v4) and add the persist-credentials: false setting under that
step's with: block to prevent credential leakage.In @.github/workflows/sync-releases.yml:
- Line 78: The drift-check job's checkout step currently uses
"actions/checkout@v4" without disabling credential persistence; update the
checkout invocation in the drift-check job to include persist-credentials: false
so the job does not leave the GITHUB_TOKEN available after checkout (locate the
checkout step under the drift-check job and add persist-credentials: false to
its step configuration).- Around line 29-30: Change the workflow-level permissions to the
least-privilege default (set permissions: contents: read) and remove the
top-level contents: write; then add a job-level permission block to the sync job
granting contents: write (e.g., under the sync job definition add permissions:
contents: write) while ensuring drift-check continues to run under the default
read-only permission (no extra permissions block or explicitly permissions:
contents: read); reference the existing permissions key and the job names sync
and drift-check when making the edits.In
@website/docs/getting-started/index.md:
- Around line 32-35: Update the index.md entry lines for "Your First Prompt" and
"Choosing an MCP Client" to remove the "(coming soon)" note and convert them to
normal links pointing to the new pages: replace the "Your First Prompt (coming
soon)" text with a standard link to ./first-prompt.md and replace "Choosing an
MCP Client (coming soon)" with a standard link to ./clients.md so both read
like the other linked items (e.g., Your First Prompt
and Choosing an MCP Client).In
@website/docs/reference/tools/core/find_gameobjects.md:
- Around line 19-25: Update the parameter table in find_gameobjects.md to add
concise descriptions for each parameter: forsearch_termdocument
examples/formats persearch_method(e.g., name: exact or wildcard like
"Player*" ; tag: single tag string; layer: numeric or name; component: fully
qualified component/class name; path: full scene path "Root/Group/Object"; id:
GUID or numeric id), forsearch_methodlist the behaviors of each option
(by_name,by_tag,by_layer,by_component,by_path,by_id) and when
to use them, clarifyinclude_inactivecontrols whether inactive/disabled
GameObjects are returned (accepts boolean or string "true"/"false"/"all"), and
describe pagination forpage_sizeandcursor(page_size: max results per
page, default and allowed range; cursor: opaque integer/string offset token to
fetch next page and how to pass it back to get subsequent results). Also mention
expected types and defaults for each parameter and include a short example row
or two showingsearch_termwithsearch_method="by_name"and
search_method="by_tag"to illustrate usage.In
@website/docs/reference/tools/core/manage_asset.md:
- Line 4: The frontmatter description is being truncated ("Performs asset
operations (import, create, modify, delete, etc") — update the docs generator in
tools/generate_docs_reference.py to pull the full description from the
source/body (or the complete metadata field) and emit the complete sentence with
closing parenthesis and period; specifically, find the function that constructs
frontmatter (e.g., generate_frontmatter or write_frontmatter in
tools/generate_docs_reference.py) and replace the truncating logic (or substring
call) with the full description value and ensure it writes the full string
verbatim into the frontmatter.In
@website/docs/reference/tools/core/script_apply_edits.md:
- Line 46: The sample on line with the text "2) Insert a method after another:
has a mismatched opening quote; fix the malformed quote by either removing the
leading double-quote or adding a closing double-quote so it matches the prior
example style ("1) Replace a method:")—update the string "2) Insert a method
after another:" accordingly.- Around line 59-60: The description contains malformed JSON delimiters (a stray
"}," and "]") in the example JSON within
website/docs/reference/tools/core/script_apply_edits.md; open the example JSON
in the description (the block that currently ends with "}, ]") and correct its
structure by removing the extraneous trailing "}," and "]" or by completing the
JSON object/array so it is valid (ensure matching braces/brackets and proper
commas), updating the example JSON in the description text accordingly.In
@website/docs/reference/tools/scripting_ext/index.md:
- Line 9: Replace the narrow header/description "ScriptableObject management"
with a broader phrase that covers both tools (for example "Advanced scripting"
or "Extended scripting capabilities") and update the surrounding summary text so
it references both manage_scriptable_object and execute_code, mentioning that
manage_scriptable_object handles ScriptableObject lifecycle while execute_code
runs arbitrary C# code; ensure the new description appears in the same place
where "ScriptableObject management" is currently used so both tools are
accurately summarized.In
@website/package.json:
- Around line 24-25: Update package.json and lockfile so the project actually
uses the latest compatible React 18.x and Docusaurus 3.x: ensure the
dependencies referencing "react" and "react-dom" (currently "^18.0.0") are
allowed to resolve to 18.3.1 by regenerating the lockfile (run npm/yarn/pnpm
install) so the lock picks 18.3.1, and bump any Docusaurus 3.x packages (e.g.
"@docusaurus/core", "@docusaurus/preset-classic", etc.) from 3.6.3 to 3.10.1 in
package.json, then regenerate the lockfile and run the project's build/test to
verify compatibility.In
@website/sidebars.js:
- Around line 76-77: The sidebar lists two potentially-duplicate entries:
'architecture/project-roadmap' and 'architecture/roadmap' in
website/sidebars.js; check the repo for both docs
(architecture/project-roadmap.md and architecture/roadmap.md) and confirm
whether they are distinct pages—if they are the same content delete or
consolidate the duplicate entry in sidebars.js (remove one reference or merge
content under the intended slug), or if they are different but misnamed, rename
the file or update the sidebar to point to the correct slug so only the intended
roadmap appears.In
@website/src/components/CopyButton/index.js:
- Around line 13-34: The onClick handler sets a timeout (setTimeout(() =>
setCopied(false), 1500)) but never clears it, causing setCopied to run after
unmount; fix by storing the timeout id (from setTimeout) in state or a ref and
add a useEffect cleanup that clears the timeout on unmount
(clearTimeout(timeoutId)). Update the CopyButton component to record the timer
when calling setTimeout in onClick and ensure useEffect returns a cleanup
function that calls clearTimeout for that id to prevent calling setCopied on an
unmounted component.In
@website/static/robots.txt:
- Line 4: robots.txt currently points to an unreachable sitemap URL ("Sitemap:
https://coplaydev.github.io/unity-mcp/sitemap.xml"); update the sitemap location
so the declared URL is valid by either adjusting your Docusaurus sitemap
configuration (set the correct baseUrl/sitemap options in the
siteConfig/docusaurus.config.js so the generated sitemap is published at that
path) or change the robots.txt directive to the actual deployed sitemap URL
(replace the "Sitemap: https://coplaydev.github.io/unity-mcp/sitemap.xml" line
with the correct reachable sitemap URL).
Nitpick comments:
In @.github/workflows/docs-deploy.yml:
- Around line 31-34: Remove the broad workflow-level write permissions for pages
and id-token and leave only contents: read at the top-level; then add scoped
permissions pages: write and id-token: write to the specific deploy job (the job
named "deploy") so only that job gets write access while the build job runs with
minimal permissions. Ensure you update the permissions block in the deploy job
to include pages: write and id-token: write and remove those keys from the
workflow-level permissions.- Line 46: Replace version tags with pinned commit SHAs for all "uses:" entries
(e.g., the actions/checkout@v4 reference and the other uses at the same
workflow) to mitigate tag-rewrite supply-chain risks: locate each "uses:
actions/checkout@...", "uses:@vX" occurrence and replace the tag
with the corresponding full commit SHA (optionally leaving the human-friendly
tag as a comment), or run a tool like pin-github-action to generate the exact
SHA; ensure every occurrence mentioned in the review (the actions at the shown
locations) is updated so the workflow references immutable commit SHAs instead
of floating tags.In @.github/workflows/sync-releases.yml:
- Around line 41-47: The checkout step using actions/checkout@v4 currently
passes token: ${{ secrets.GITHUB_TOKEN }} but doesn't set persist-credentials;
either remove the explicit token if you rely on the default behavior, or make
the intent explicit: if the job must push commits (the later push step), keep
the token and add persist-credentials: true (and a brief comment explaining
"credentials must persist for push"), otherwise set persist-credentials: false
to avoid persisting credentials; update the Checkout beta block (ref: beta,
fetch-depth: 0, token) accordingly to reflect the chosen behavior and comment.In
@tools/generate_docs_reference.py:
- Line 84: The import line "from services.registry import ( # noqa: WPS433
(deferred import by design)" references a wemake-specific rule that Ruff doesn't
understand; either remove the "WPS433" from the trailing noqa comment on that
import or add "WPS433" to Ruff's lint.external configuration so Ruff knows to
ignore it. Locate the import statement for services.registry in
generate_docs_reference.py and either delete the "WPS433" token from the "#
noqa" comment or update your Ruff config (lint.external) to include "WPS433" so
linting stops flagging it.In
@website/docs/architecture/python-layers.md:
- Around line 35-39: The fenced code block in the markdown lacks a language
specifier; update the opening fence fromtotext (or another explicit
spec like ```plain) so the block containing the file lines
(Server/src/services/tools/manage_navigation.py,
Server/src/cli/commands/navigation.py,
MCPForUnity/Editor/Tools/ManageNavigation.cs) is marked as text and satisfies
the markdown linter and renderer.In
@website/docs/getting-started/first-prompt.md:
- Around line 44-48: Remove the blank lines inside the blockquote containing the
three prompts so there are no empty lines between each '>' line; edit the
blockquoted lines starting with "Add a directional light...", "Write a C#
script...", and "Run all tests..." to be consecutive blockquote lines (each
prefixed with '>') without intervening blank lines to satisfy the markdown
linter.In
@website/docs/getting-started/install.md:
- Around line 59-63: Remove the extra blank lines within the blockquote examples
so each quoted item is contiguous; in the block containing the three examples
("Create a red, blue, and yellow cube in the current scene.", "Build a simple
player controller with WASD movement and a double-jump.", "List every script in
Assets/Scriptsand tell me which ones referenceRigidbody.") collapse any
blank lines between them so they form a single continuous blockquote without
internal empty lines to satisfy markdown linters.In
@website/docs/guides/multi-instance.md:
- Around line 44-46: Add language identifiers to the fenced code blocks that
show tool call examples (e.g., the block containing
set_active_instance(instance="MyGame@a1b2c3d4") and the other examples at the
same section) by replacing the opening triple backticks with a language tag like
text orbash so markdown linters pick them up and syntax highlighting is
consistent; update each fenced block showing command/tool usage (including the
blocks around set_active_instance and the subsequent examples) accordingly.In
@website/docs/guides/tool-groups.md:
- Around line 35-37: Update the three fenced code blocks that show
manage_tools(...) calls to include a language specifier (e.g., "python") so they
satisfy MD040; locate the blocks containing the calls to
manage_tools(action="activate", group="vfx") and the two other similar examples
and prepend the opening fences with ```python to enable syntax highlighting.- Line 81: Add a trailing blank line at the end of the Markdown document
(tool-groups.md) so the file ends with a single final newline character; simply
open the file and ensure there is one empty line after the last content line,
save the file, and verify the linter no longer flags a missing final newline.In
@website/docs/guides/troubleshooting.md:
- Line 184: The file website/docs/guides/troubleshooting.md is missing a
trailing newline; open that file and add a single blank line at the end (ensure
the file ends with a final newline character) to satisfy the Markdown
consistency requirement.In
@website/docs/guides/uv-setup.md:
- Line 111: Add a single trailing newline at the end of the Markdown document
(uv-setup.md) so the file ends with a blank line/EOF newline; open the file,
place one final blank line after the last content line and save so the file
terminates with a newline character.In
@website/docs/reference/cli.md:
- Line 97: Add a final newline character at the end of the Markdown file
(website/docs/reference/cli.md) so the file ends with a blank line; simply open
the file and ensure the last line is followed by a single trailing newline (save
the file) to satisfy the trailing-newline requirement.In
@website/docs/reference/manifest.md:
- Line 70: Add a trailing blank line at the end of the manifest.md file (ensure
the file ends with a single final newline character) so the markdown file
terminates with a blank line for consistency and tooling compatibility; simply
open manifest.md and insert one final newline at EOF.In
@website/docs/reference/resources/index.md:
- Around line 14-20: Remove the duplicated plain-text URI that appears
immediately below the bold "URI:" line for each resource entry (e.g., in the
## \cameras`section where you currently have both "**URI:** \mcpforunity://scene/cameras`" and then a repeat "URI:
mcpforunity://scene/cameras"); keep only the bold "URI:" line and delete the
subsequent repeated plain-text URI for all resource headings throughout the
document (apply the same change to the other resource sections that repeat their
URIs).In
@website/docs/reference/tools/core/debug_request_context.md:
- Line 23: Update the return description for the debug_request_context tool to
be specific: replace the generic "Adictcontaining the Unity response. The
exact shape depends on the action." with a clear schema listing the fields
returned (e.g., client_id: string, session_id: string, meta_dump: dict/JSON with
arbitrary metadata) and note any optional fields or types; reference the tool
name debug_request_context in the doc so readers know this description applies
to that tool.In
@website/docs/reference/tools/core/execute_custom_tool.md:
- Around line 19-22: Add descriptive text for both parameters: explain that
tool_nameis the identifier of the custom tool to invoke (a string matching
registered tool IDs or function names, case-sensitive, e.g., "translate_text" or
"weather.lookup") and what naming conventions/valid values are permitted; and
describeparametersas an optional mapping from parameter names (strings) to
JSON-serializable values (primitives, lists, nested dicts) that the tool
expects, noting required vs optional parameter keys, how to pass null/omit
parameters, and any type/format constraints (e.g., date strings, enums) so users
know the expected structure and examples of typical entries.In
@website/docs/reference/tools/core/index.md:
- Line 21: The manage_asset entry is truncated and missing the final period;
update the description formanage_asset(symbol: manage_asset) to complete the
sentence and close the parenthesis, e.g., change "Performs asset operations
(import, create, modify, delete, etc" to a full phrase like "Performs asset
operations (import, create, modify, delete, etc.)" or expand "etc." into a short
list, and ensure the line ends with a period and a closing parenthesis.- Line 28: Update the markdown entry for the tool label manage_material to
add the missing period after "etc" so the description reads "...shaders, etc.";
locate the line containing "manage_material—
Manages Unity materials (set properties, colors, shaders, etc)" and append the
period.In
@website/docs/reference/tools/core/manage_prefabs.md:
- Line 15: The single dense paragraph in manage_prefabs.md should be split into
a short overview sentence followed by clear, scoped sections: a bulleted list of
supported actions (get_info, get_hierarchy, create_from_gameobject,
modify_contents, open_prefab_stage, save_prefab_stage, close_prefab_stage), a
short paragraph describing the two editing approaches (Headless via
modify_contents vs Interactive via open_prefab_stage →
manage_gameobject/manage_components → save_prefab_stage/close_prefab_stage), and
separate sub-sections for child management (create_child/delete_child examples)
and component handling (component_properties and object reference formats
{"guid":...}, {"path":...}, {"instanceID":...}); keep the manage_asset search
tip as a one-line note. Ensure each concept is its own paragraph or bullet so
users can scan quickly.In
@website/docs/reference/tools/core/manage_script_capabilities.md:
- Around line 16-28: Move the specific return-field bullets (ops, text_ops,
max_edit_payload_bytes, guards) out of the Description block and into the
Returns section so the Returns section lists the exact dict shape; update the
generator/template that produces manage_script_capabilities.md to emit those
field descriptions under the "Returns" heading (as a bullet list describing each
key and its meaning) and leave the Description focused on behavior only.In
@website/docs/reference/tools/index.md:
- Line 31: The generated docs use "etc" without a period; update the generator
templates in tools/generate_docs_reference.py to change the description strings
that include "etc" to "etc." (e.g., the templates that produce the manage_asset
and related tool descriptions) so the output reads "etc." in both places; locate
the description/template variables or functions in generate_docs_reference.py
that build those tool description lines and replace "etc" with "etc.".In
@website/src/components/HomeCloser/styles.module.css:
- Around line 90-95: Replace the hard-coded hover text color in the
.ctaPrimary:hover rule — currently set to#ffffff— with the theme variable used
elsewhere (e.g., var(--ifm-color-emphasis-0)); update the .ctaPrimary:hover
selector to use var(--ifm-color-emphasis-0) so it matches the pattern used in
the .ctaPrimary base styles and preserves theme/dark-mode consistency.</details> <details> <summary>🪄 Autofix (Beta)</summary> Fix all unresolved CodeRabbit comments on this PR: - [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended) - [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes </details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro **Run ID**: `3884e26f-d538-4464-b734-c0ccb2dafcb0` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between f06ff90b7f1b2228f543d4407cd159d97a2f938b and 033c873e1397c564329171532bf1873de0271059. </details> <details> <summary>⛔ Files ignored due to path filters (18)</summary> * `website/package-lock.json` is excluded by `!**/package-lock.json` * `website/static/img/building_scene.gif` is excluded by `!**/*.gif` * `website/static/img/building_scene.mp4` is excluded by `!**/*.mp4` * `website/static/img/building_scene.webm` is excluded by `!**/*.webm` * `website/static/img/favicon.png` is excluded by `!**/*.png` * `website/static/img/logo-mark-dark.svg` is excluded by `!**/*.svg` * `website/static/img/logo-mark.svg` is excluded by `!**/*.svg` * `website/static/img/logo.png` is excluded by `!**/*.png` * `website/static/img/networking-architecture.png` is excluded by `!**/*.png` * `website/static/img/social-card.png` is excluded by `!**/*.png` * `website/static/img/v5_01_uninstall.png` is excluded by `!**/*.png` * `website/static/img/v5_02_install.png` is excluded by `!**/*.png` * `website/static/img/v5_03_open_mcp_window.png` is excluded by `!**/*.png` * `website/static/img/v5_04_rebuild_mcp_server.png` is excluded by `!**/*.png` * `website/static/img/v5_05_rebuild_success.png` is excluded by `!**/*.png` * `website/static/img/v6_new_ui_asset_store_version.png` is excluded by `!**/*.png` * `website/static/img/v6_new_ui_dark.png` is excluded by `!**/*.png` * `website/static/img/v6_new_ui_light.png` is excluded by `!**/*.png` </details> <details> <summary>📒 Files selected for processing (131)</summary> * `.github/ISSUE_TEMPLATE/bug_report.yml` * `.github/ISSUE_TEMPLATE/config.yml` * `.github/ISSUE_TEMPLATE/feature_request.yml` * `.github/workflows/docs-deploy.yml` * `.github/workflows/docs-generate.yml` * `.github/workflows/sync-releases.yml` * `CODE_OF_CONDUCT.md` * `CONTRIBUTING.md` * `README.md` * `SECURITY.md` * `docs/guides/CURSOR_HELP.md` * `tools/generate_docs_reference.py` * `tools/hooks/pre-commit` * `tools/sync_release_notes.py` * `website/.gitignore` * `website/README.md` * `website/docs/architecture/manage-physics.md` * `website/docs/architecture/project-roadmap.md` * `website/docs/architecture/python-layers.md` * `website/docs/architecture/remote-auth.md` * `website/docs/architecture/roadmap.md` * `website/docs/architecture/telemetry.md` * `website/docs/architecture/transports.md` * `website/docs/architecture/unity-compat.md` * `website/docs/contributing/dev-setup.md` * `website/docs/contributing/docs.md` * `website/docs/contributing/releases.md` * `website/docs/contributing/testing.md` * `website/docs/getting-started/clients.md` * `website/docs/getting-started/first-prompt.md` * `website/docs/getting-started/index.md` * `website/docs/getting-started/install.md` * `website/docs/guides/claude-code-cli.md` * `website/docs/guides/cli-examples.md` * `website/docs/guides/cli.md` * `website/docs/guides/client-configurators.md` * `website/docs/guides/custom-tools.md` * `website/docs/guides/multi-instance.md` * `website/docs/guides/remote-server-auth.md` * `website/docs/guides/roslyn.md` * `website/docs/guides/tool-groups.md` * `website/docs/guides/troubleshooting.md` * `website/docs/guides/uv-setup.md` * `website/docs/migrations/v5.md` * `website/docs/migrations/v6.md` * `website/docs/migrations/v8.md` * `website/docs/reference/cli.md` * `website/docs/reference/manifest.md` * `website/docs/reference/resources/index.md` * `website/docs/reference/tools/animation/_category_.json` * `website/docs/reference/tools/animation/index.md` * `website/docs/reference/tools/animation/manage_animation.md` * `website/docs/reference/tools/core/_category_.json` * `website/docs/reference/tools/core/apply_text_edits.md` * `website/docs/reference/tools/core/batch_execute.md` * `website/docs/reference/tools/core/create_script.md` * `website/docs/reference/tools/core/debug_request_context.md` * `website/docs/reference/tools/core/delete_script.md` * `website/docs/reference/tools/core/execute_custom_tool.md` * `website/docs/reference/tools/core/execute_menu_item.md` * `website/docs/reference/tools/core/find_gameobjects.md` * `website/docs/reference/tools/core/find_in_file.md` * `website/docs/reference/tools/core/get_sha.md` * `website/docs/reference/tools/core/index.md` * `website/docs/reference/tools/core/manage_asset.md` * `website/docs/reference/tools/core/manage_build.md` * `website/docs/reference/tools/core/manage_camera.md` * `website/docs/reference/tools/core/manage_components.md` * `website/docs/reference/tools/core/manage_editor.md` * `website/docs/reference/tools/core/manage_gameobject.md` * `website/docs/reference/tools/core/manage_graphics.md` * `website/docs/reference/tools/core/manage_material.md` * `website/docs/reference/tools/core/manage_packages.md` * `website/docs/reference/tools/core/manage_physics.md` * `website/docs/reference/tools/core/manage_prefabs.md` * `website/docs/reference/tools/core/manage_scene.md` * `website/docs/reference/tools/core/manage_script.md` * `website/docs/reference/tools/core/manage_script_capabilities.md` * `website/docs/reference/tools/core/manage_tools.md` * `website/docs/reference/tools/core/read_console.md` * `website/docs/reference/tools/core/refresh_unity.md` * `website/docs/reference/tools/core/script_apply_edits.md` * `website/docs/reference/tools/core/set_active_instance.md` * `website/docs/reference/tools/core/validate_script.md` * `website/docs/reference/tools/docs/_category_.json` * `website/docs/reference/tools/docs/index.md` * `website/docs/reference/tools/docs/unity_docs.md` * `website/docs/reference/tools/docs/unity_reflect.md` * `website/docs/reference/tools/index.md` * `website/docs/reference/tools/probuilder/_category_.json` * `website/docs/reference/tools/probuilder/index.md` * `website/docs/reference/tools/probuilder/manage_probuilder.md` * `website/docs/reference/tools/profiling/_category_.json` * `website/docs/reference/tools/profiling/index.md` * `website/docs/reference/tools/profiling/manage_profiler.md` * `website/docs/reference/tools/scripting_ext/_category_.json` * `website/docs/reference/tools/scripting_ext/execute_code.md` * `website/docs/reference/tools/scripting_ext/index.md` * `website/docs/reference/tools/scripting_ext/manage_scriptable_object.md` * `website/docs/reference/tools/testing/_category_.json` * `website/docs/reference/tools/testing/get_test_job.md` * `website/docs/reference/tools/testing/index.md` * `website/docs/reference/tools/testing/run_tests.md` * `website/docs/reference/tools/ui/_category_.json` * `website/docs/reference/tools/ui/index.md` * `website/docs/reference/tools/ui/manage_ui.md` * `website/docs/reference/tools/vfx/_category_.json` * `website/docs/reference/tools/vfx/index.md` * `website/docs/reference/tools/vfx/manage_shader.md` * `website/docs/reference/tools/vfx/manage_texture.md` * `website/docs/reference/tools/vfx/manage_vfx.md` * `website/docs/releases.md` * `website/docusaurus.config.js` * `website/package.json` * `website/sidebars.js` * `website/src/components/CopyButton/index.js` * `website/src/components/CopyButton/styles.module.css` * `website/src/components/HomeArchitecture/index.js` * `website/src/components/HomeArchitecture/styles.module.css` * `website/src/components/HomeCloser/index.js` * `website/src/components/HomeCloser/styles.module.css` * `website/src/components/HomeFeatures/index.js` * `website/src/components/HomeFeatures/styles.module.css` * `website/src/components/HomeHero/index.js` * `website/src/components/HomeHero/styles.module.css` * `website/src/components/HomeStats/index.js` * `website/src/components/HomeStats/styles.module.css` * `website/src/css/custom.css` * `website/src/pages/index.js` * `website/static/.nojekyll` * `website/static/robots.txt` </details> <details> <summary>💤 Files with no reviewable changes (1)</summary> * docs/guides/CURSOR_HELP.md </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
|
|
||
| # `scripting_ext` tools | ||
|
|
||
| ScriptableObject management |
There was a problem hiding this comment.
Broaden the group description to reflect all tools.
The description "ScriptableObject management" only covers manage_scriptable_object but doesn't describe execute_code, which executes arbitrary C# code. Consider a broader description like "Advanced scripting" or "Extended scripting capabilities" to encompass both tools.
📝 Suggested revision
-ScriptableObject management
+Advanced scripting and ScriptableObject management📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ScriptableObject management | |
| Advanced scripting and ScriptableObject management |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@website/docs/reference/tools/scripting_ext/index.md` at line 9, Replace the
narrow header/description "ScriptableObject management" with a broader phrase
that covers both tools (for example "Advanced scripting" or "Extended scripting
capabilities") and update the surrounding summary text so it references both
manage_scriptable_object and execute_code, mentioning that
manage_scriptable_object handles ScriptableObject lifecycle while execute_code
runs arbitrary C# code; ensure the new description appears in the same place
where "ScriptableObject management" is currently used so both tools are
accurately summarized.
| "react": "^18.0.0", | ||
| "react-dom": "^18.0.0" |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
What are the latest versions of React 18.x and Docusaurus 3.x as of May 2026?
💡 Result:
As of May 24, 2026, the latest versions for the requested software are: React 18.x: The latest version in the 18.x series is 18.3.1, released on April 26, 2024 [1][2][3]. React 18 has since been succeeded by React 19 (released in December 2024) and is no longer in active development, though it remains in a security-patch-only support status [4]. Docusaurus 3.x: The latest version in the 3.x series is 3.10.1, released on April 30, 2026 [5][6][7]. This is the final planned release for the v3.x line, intended to help users prepare for the transition to Docusaurus v4 [8].
Citations:
- 1: https://react.dev/versions
- 2: https://github.com/facebook/react/blob/c00e895c190f42c6f476465f4be38a9c93c9a0d1/CHANGELOG.md
- 3: https://github.com/facebook/react/blob/main/CHANGELOG.md
- 4: https://dev.to/endoflifeai/react-end-of-life-dates-whats-actually-supported-in-2026-2c90
- 5: https://github.com/facebook/docusaurus/releases/tag/v3.10.1
- 6: https://docusaurus.io/changelog/3.10.1
- 7: https://docusaurus.io/changelog
- 8: https://docusaurus.io/blog/releases/3.10
Update React/Docusaurus dependency ranges to the latest compatible 18.x/3.x versions
- Latest React 18.x: 18.3.1 (Apr 26, 2024). Since the range is
"react": "^18.0.0"/"react-dom": "^18.0.0", it already permits 18.3.1—regenerate your lockfile to actually pick it up. - Latest Docusaurus 3.x: 3.10.1 (Apr 30, 2026). If your site is still on 3.6.3, bump the Docusaurus 3.x dependencies accordingly.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@website/package.json` around lines 24 - 25, Update package.json and lockfile
so the project actually uses the latest compatible React 18.x and Docusaurus
3.x: ensure the dependencies referencing "react" and "react-dom" (currently
"^18.0.0") are allowed to resolve to 18.3.1 by regenerating the lockfile (run
npm/yarn/pnpm install) so the lock picks 18.3.1, and bump any Docusaurus 3.x
packages (e.g. "`@docusaurus/core`", "`@docusaurus/preset-classic`", etc.) from
3.6.3 to 3.10.1 in package.json, then regenerate the lockfile and run the
project's build/test to verify compatibility.
| 'architecture/project-roadmap', | ||
| 'architecture/roadmap', |
There was a problem hiding this comment.
Duplicate roadmap entries detected.
Both architecture/project-roadmap and architecture/roadmap are listed in the Architecture category. This may result in duplicate navigation entries or a broken link if only one file exists.
Please verify whether both files exist and are intended to be separate entries, or if this is a duplicate reference.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@website/sidebars.js` around lines 76 - 77, The sidebar lists two
potentially-duplicate entries: 'architecture/project-roadmap' and
'architecture/roadmap' in website/sidebars.js; check the repo for both docs
(architecture/project-roadmap.md and architecture/roadmap.md) and confirm
whether they are distinct pages—if they are the same content delete or
consolidate the duplicate entry in sidebars.js (remove one reference or merge
content under the intended slug), or if they are different but misnamed, rename
the file or update the sidebar to point to the correct slug so only the intended
roadmap appears.
| User-agent: * | ||
| Allow: / | ||
|
|
||
| Sitemap: https://coplaydev.github.io/unity-mcp/sitemap.xml |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check if the sitemap URL returns 200 OK
curl -s -o /dev/null -w "%{http_code}" https://coplaydev.github.io/unity-mcp/sitemap.xmlRepository: CoplayDev/unity-mcp
Length of output: 66
Fix sitemap directive: robots.txt points to a 404 sitemap.
website/static/robots.txt declares Sitemap: https://coplaydev.github.io/unity-mcp/sitemap.xml, but curl to that URL returns 404, so the sitemap isn’t accessible at the specified location after deployment. Update the Docusaurus sitemap output/config (or change the robots.txt URL) so the declared sitemap URL is reachable.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@website/static/robots.txt` at line 4, robots.txt currently points to an
unreachable sitemap URL ("Sitemap:
https://coplaydev.github.io/unity-mcp/sitemap.xml"); update the sitemap location
so the declared URL is valid by either adjusting your Docusaurus sitemap
configuration (set the correct baseUrl/sitemap options in the
siteConfig/docusaurus.config.js so the generated sitemap is published at that
path) or change the robots.txt directive to the actual deployed sitemap URL
(replace the "Sitemap: https://coplaydev.github.io/unity-mcp/sitemap.xml" line
with the correct reachable sitemap URL).
CodeRabbit + Copilot review fixes that don't touch the generated tool
reference. Generator change + regenerated pages come in a follow-up
commit.
docs:
- guides/uv-setup.md: Python requirement was wrongly 3.12+; the server
pyproject declares >=3.10. Verify command + body updated to 3.10+.
Homebrew tip retains 3.12 as a reasonable default.
- getting-started/index.md: drop "(coming soon)" placeholders for
Your First Prompt and Choosing an MCP Client — both pages exist
in this PR. Setup Wizard remains "coming soon" (not in this PR).
- .github/ISSUE_TEMPLATE/bug_report.yml: troubleshooting link pointed
at /guides/cursor (deleted earlier in this branch); now points at
/guides/troubleshooting which is where that content lives.
components:
- CopyButton: track setTimeout in a useRef, clear it on unmount and
before scheduling a new one. Prevents React "setState on unmounted
component" warnings and stops timer-stacking on rapid clicks.
- HomeArchitecture diagram <div>: now role="img" with a descriptive
aria-label that explains the layer flow, so assistive tech actually
announces the diagram instead of skipping it.
workflows (security):
- docs-deploy.yml, docs-generate.yml: add `persist-credentials: false`
on actions/checkout — these jobs never push, so the token shouldn't
linger in the checked-out worktree (zizmor `artipacked` warning).
- sync-releases.yml:
- Workflow-level permissions narrowed to `contents: read`; the
`sync` job opts into `contents: write` itself. `drift-check`
stays read-only.
- drift-check job: was gated on `pull_request` but the workflow had
no pull_request trigger — unreachable code. Added a paths-scoped
pull_request trigger so PRs touching the sync script or the synced
docs run the check.
- `sync` job retains `persist-credentials: true` (it pushes back).
- drift-check checkout gets `persist-credentials: false`.
CodeRabbit comments NOT addressed in this PR and why:
- execute_menu_item 'exists' mode, script_apply_edits malformed JSON,
find_gameobjects empty param descriptions: all live in the Python
tool's source description string under Server/src/services/tools/.
Fixing upstream is a separate code PR; the generator faithfully
renders whatever source provides.
- React 18.3.1 / Docusaurus 3.10.1 bump: out of scope for this docs
PR; the lockfile already permits the latest 18.x, and a Docusaurus
minor bump is a separate dependency PR.
- robots.txt sitemap 404 check: will resolve as soon as Pages serves
the site on the canonical URL. Not a real bug.
- sidebars.js duplicate roadmap: /architecture/roadmap is the 2026
feature deep-research; /architecture/project-roadmap is the wiki
living roadmap. Two distinct docs, intentional.
- scripting_ext group blurb: comes from the registry TOOL_GROUPS map;
wording tweak not worth touching in a docs PR.
PR CoplayDev#1157 review (Copilot + CodeRabbit) flagged that several tool pages had truncated frontmatter, e.g. manage_asset rendering as: description: "Performs asset operations (import, create, modify, delete, etc" Root cause: the generator used `description.split(".")[0]` to derive the frontmatter blurb. That cuts at the FIRST period — including periods inside abbreviations and parenthesized lists ("etc.) in Unity."), so the rendered description stopped mid-clause. Fix: introduce `_first_sentence()` that splits on real sentence boundaries — `.` / `!` / `?` followed by whitespace + capital, or a paragraph break — and falls back to the whole string if no boundary exists. Also caps absurdly long single-sentence descriptions at ~240 chars to keep frontmatter compact. All three call sites that used the old split: - frontmatter `description:` in render_tool_page - group-index bullets in render_group_index - catalog-index bullets in render_catalog_index Regenerated all 43 tool pages + 9 group landings + catalog index + resources catalog. Verified `--check` passes round-trip and full website build is clean. manage_asset now reads: "Performs asset operations (import, create, modify, delete, etc.) in Unity."
PR CoplayDev#1157 review surfaced that the drift-check job was failing on outsider PRs that touched README.md for unrelated reasons (citation tweaks, link fixes). The path filter caught any README edit even when the recent-updates block wasn't touched, and the failure couldn't be fixed by the PR author since they didn't have push access to commit a regen. Real-world reasoning: release notes can only legitimately go stale when a release event occurs. PRs cannot introduce drift the workflow needs to "catch" — and a drift-check that an outsider can't fix is hostile to contributions. Changes: - Drop the `pull_request` trigger entirely (was only there to feed the now-removed drift-check job). - Drop the daily `schedule` cron. UI edits to release bodies are caught by the `release.edited` event already; falling back to a cron added mystery commits unattached to a release. - Drop the `drift-check` job. Nothing left needs to gate on PRs. - Keep `release.{published,edited,unpublished,deleted}` as the canonical trigger, and `workflow_dispatch` as the manual hatch. - Updated /contributing/docs page to match, with an explicit paragraph on why PRs are NOT a trigger here.
Description
One big part for the 10K star rebrand/refresh. Static website now set up beyond the readme.
Summary by CodeRabbit
Documentation
Community
Automation