Not in the top 1,000 by GitHub stars

ibrews/ue5-mcp

Cowork/Claude Code skill for Unreal Engine 5 development via MCP, pixel streaming, and Python editor scripting

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Network or broad shell

116234bb0d5a → 93c9df2e4dde

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 116234bb0d5a

No earlier version was observed for comparison.

Compare on GitHub

skills/blueprint-reader/SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

116234bb0d5a → 93c9df2e4dde

A local comparison is unavailable. You can inspect the recorded versions on GitHub.

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 116234bb0d5a

No earlier version was observed for comparison.

Compare on GitHub

skills/ue5-mcp/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Not checked yet → After Instructions only

116234bb0d5a → 93c9df2e4dde

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Not checked yet

First observation → 116234bb0d5a

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 93c9df2e4dde6764d6909551c47a14cdc1ee47c1

git clone --filter=blob:none --no-checkout https://github.com/ibrews/ue5-mcp.git .hotskills/ibrews-ue5-mcp && git -C .hotskills/ibrews-ue5-mcp checkout --detach 93c9df2e4dde6764d6909551c47a14cdc1ee47c1 # Copy each selected skill directory from .hotskills/ibrews-ue5-mcp into .claude/skills/<skill-name>/
47GitHub stars
0stars in 7 days
3skills in this repository
16commits in 30 days

Heat

1.6
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Oct 30, 202647

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

ue5-mcp

When your agent uses it

Field manual for driving Unreal Engine 5.7 / 5.8 through MCP. Engine-level gotchas, silent-fail edges, crash patterns, and the call sequences that actually work — applicable regardless of which MCP server you're using (Epic's official ModelContextProtocol plugin, custom servers, or anything else). Auto-trigger when Unreal Engine MCP tools are detected in a session, or when the user mentions Unreal Engine, UE5, Blueprints, Niagara, MetaSound, materials, or any UE editor automation workflow. This skill contains hard-won knowledge from real debugging sessions — most entries trace back to an actual editor crash or hours-long faceplant. Ignoring it when UE5 MCP tools are present will lead to wasted time hitting known dead ends.

What it loads into context

Frontmatter

202 tokens

Always available to the agent

SKILL.md

12,982 tokens

When the skill is activated

Reference documents

5,969 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 1. Session checklist — read before you write
  2. 2. UE5 reflection gotchas
  3. 3. UE5 stability — actions that crash the editor
  4. 4. Identifier and path conventions
  5. 5. UE5 subsystem gotchas
  6. 6. MCP transport requirements
  7. 7. Python ↔ MCP data channel
  8. 8. Patterns for MCP server authors targeting UE5
  9. 9. Patterns for MCP clients (agents)
  10. 10. UE 5.7 vs 5.8 — engine-level differences
  11. 11. Asset structure quick reference
  12. 12. Anti-patterns
  13. 13. Reading list
  14. Version history

Scripts executed separately

  • docs/trailer/render.py
  • docs/trailer/render_motion.py
  • docs/trailer/render_visual.py

Files

  • .claude-plugin/plugin.jsonasset792 bytes
  • .github/workflows/blueprint-reader-pages.ymlasset1,812 bytes
  • .gitignoreasset136 bytes
  • LICENSEasset1,079 bytes
  • README.mddoc12,633 bytes
  • SKILL.mdcore55,142 bytes
  • SKILL.mdcore55,142 bytes
  • SKILL.mdcore55,142 bytes
  • SKILL.mdcore55,142 bytes
  • SKILL.mdcore55,142 bytes
  • SKILL.mdcore55,142 bytes
  • SKILL.mdcore55,142 bytes
  • SKILL.mdcore55,142 bytes
  • SKILL.mdcore55,142 bytes
  • docs/assets/blueprint-reader-local-ui.pngasset171,660 bytes
  • docs/assets/blueprint-reader-overview-prompt.txtdoc2,229 bytes
  • docs/assets/blueprint-reader-overview.pngasset1,782,463 bytes
  • docs/assets/blueprint-reader-trailer-poster.jpgasset322,866 bytes
  • docs/assets/blueprint-reader-trailer.mp4asset7,089,924 bytes
  • docs/blueprint-reader-launch.mddoc4,926 bytes
  • docs/trailer/README.mddoc9,013 bytes
  • docs/trailer/captures-v2/graph-branches.pngasset248,836 bytes
  • docs/trailer/captures-v2/graph-cinematic.pngasset244,551 bytes
  • docs/trailer/captures-v2/graph-entry.pngasset250,079 bytes
  • docs/trailer/captures-v2/graph-ui-chain.pngasset251,247 bytes
  • docs/trailer/captures-v2/graph-wide.pngasset212,980 bytes
  • docs/trailer/captures-v2/import/000.pngasset91,655 bytes
  • docs/trailer/captures-v2/import/001.pngasset91,655 bytes
  • docs/trailer/captures-v2/import/002.pngasset91,655 bytes
  • docs/trailer/captures-v2/import/003.pngasset91,655 bytes
  • docs/trailer/captures-v2/import/004.pngasset91,655 bytes
  • docs/trailer/captures-v2/import/005.pngasset91,655 bytes
  • docs/trailer/captures-v2/import/006.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/007.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/008.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/009.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/010.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/011.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/012.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/013.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/014.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/015.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/016.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/017.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/018.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/019.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/020.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/021.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/022.pngasset90,832 bytes
  • docs/trailer/captures-v2/import/023.pngasset90,832 bytes
  • docs/trailer/captures-v2/input/000.pngasset92,673 bytes
  • docs/trailer/captures-v2/input/001.pngasset90,901 bytes
  • docs/trailer/captures-v2/input/002.pngasset90,878 bytes
  • docs/trailer/captures-v2/input/003.pngasset90,968 bytes
  • docs/trailer/captures-v2/input/004.pngasset91,114 bytes
  • docs/trailer/captures-v2/input/005.pngasset91,147 bytes
  • docs/trailer/captures-v2/input/006.pngasset91,171 bytes
  • docs/trailer/captures-v2/input/007.pngasset91,254 bytes
  • docs/trailer/captures-v2/input/008.pngasset91,265 bytes
  • docs/trailer/captures-v2/input/009.pngasset91,494 bytes
  • docs/trailer/captures-v2/input/010.pngasset91,451 bytes
  • docs/trailer/captures-v2/input/011.pngasset91,557 bytes
  • docs/trailer/captures-v2/input/012.pngasset91,687 bytes
  • docs/trailer/captures-v2/input/013.pngasset91,705 bytes
  • docs/trailer/captures-v2/input/014.pngasset91,750 bytes
  • docs/trailer/captures-v2/input/015.pngasset91,757 bytes
  • docs/trailer/captures-v2/input/016.pngasset91,872 bytes
  • docs/trailer/captures-v2/input/017.pngasset91,954 bytes
  • docs/trailer/captures-v2/input/018.pngasset92,018 bytes
  • docs/trailer/captures-v2/input/019.pngasset92,125 bytes
  • docs/trailer/captures-v2/input/020.pngasset92,192 bytes
  • docs/trailer/captures-v2/input/021.pngasset92,230 bytes
  • docs/trailer/captures-v2/input/022.pngasset92,277 bytes
  • docs/trailer/captures-v2/input/023.pngasset92,360 bytes
  • docs/trailer/captures-v2/input/024.pngasset92,413 bytes
  • docs/trailer/captures-v2/input/025.pngasset92,567 bytes
  • docs/trailer/captures-v2/input/026.pngasset92,604 bytes
  • docs/trailer/captures-v2/input/027.pngasset92,713 bytes
  • docs/trailer/captures-v2/input/028.pngasset92,767 bytes
  • docs/trailer/captures-v2/input/029.pngasset92,862 bytes
  • docs/trailer/captures-v2/input/030.pngasset92,849 bytes
  • docs/trailer/captures-v2/input/031.pngasset92,915 bytes
  • docs/trailer/captures-v2/input/032.pngasset92,978 bytes
  • docs/trailer/captures-v2/input/033.pngasset93,066 bytes
  • docs/trailer/captures-v2/input/034.pngasset93,103 bytes
  • docs/trailer/captures-v2/input/035.pngasset93,282 bytes
  • docs/trailer/captures-v2/input/036.pngasset93,311 bytes
  • docs/trailer/captures-v2/input/037.pngasset93,470 bytes
  • docs/trailer/captures-v2/input/038.pngasset93,604 bytes
  • docs/trailer/captures-v2/input/039.pngasset93,632 bytes
  • docs/trailer/captures-v2/input/040.pngasset93,764 bytes
  • docs/trailer/captures-v2/input/041.pngasset93,809 bytes
  • docs/trailer/captures-v2/input/042.pngasset93,894 bytes
  • docs/trailer/captures-v2/input/043.pngasset93,867 bytes
  • docs/trailer/captures-v2/reader-brief.pngasset101,353 bytes
  • docs/trailer/captures-v2/reader-copied.pngasset101,006 bytes
  • docs/trailer/captures-v2/source-excerpt.txtdoc2,400 bytes
  • docs/trailer/captures/01-home.pngasset68,720 bytes
  • docs/trailer/captures/02-link.pngasset95,165 bytes
  • docs/trailer/captures/03-reading.pngasset91,655 bytes
  • docs/trailer/captures/04-overview.pngasset90,832 bytes
  • docs/trailer/captures/05-brief.pngasset101,353 bytes
  • docs/trailer/captures/06-brief-detail.pngasset105,421 bytes
  • docs/trailer/captures/07-explore.pngasset85,286 bytes
  • docs/trailer/captures/08-trace.pngasset119,177 bytes
  • docs/trailer/index.htmlasset4,987 bytes
  • docs/trailer/render.pyruns13,111 bytes
  • docs/trailer/render_motion.pyruns10,892 bytes
  • docs/trailer/render_visual.pyruns21,723 bytes
  • docs/trailer/requirements.txtdoc28 bytes
Read SKILL.md

# ue5-mcp — Field manual for driving Unreal Engine 5 via MCP

Engine-level wisdom an LLM needs to drive UE5 through an MCP server without
faceplanting on UE's silent-fail edges. This skill is **server-agnostic**:
the gotchas, patterns, and identifiers documented here apply whether you're
connected to Epic's official `ModelContextProtocol` plugin (UE 5.8+) or any
other MCP server that exposes UE5 functionality.

What this skill *isn't*: a list of commands for any particular MCP server.
Each server publishes its own tool catalogue — ask the server with
`tools/list` for what it actually exposes. This skill covers what bites you
*after* you know the tool names.

---
View the complete source on GitHub

Skills included

  • ue5-mcp
  • blueprint-reader
  • ue5-mcp

Repository facts

License
MIT
Created
Mar 12, 2026
Last pushed
Oct 29, 2026
Forks
7
Open issues
1
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 33 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/blueprint-reader/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 385 signals by file

.claude-plugin/plugin.json

  • Network accessline 6
    "name": "ibrews"   },   "repository": "https://github.com/ibrews/ue5-mcp",
  • Network accessline 7
    },   "repository": "https://github.com/ibrews/ue5-mcp",   "license": "MIT",
  • Network accessline 8
    "repository": "https://github.com/ibrews/ue5-mcp",

README.md

  • Network accessline 5
    **[Try Blueprint Reader in your browser →](https://ibrews.github.io/ue5-mcp/)** No installation or account. Paste raw text, add files, reopen a saved session, or import a BlueprintUE link automatically. Parsing stays in your browser; link i
  • Network accessline 13
    [![Watch the 42-second Blueprint Reader trailer: real Blueprint nodes, the Claude story, a link import, and a compact brief.](docs/assets/blueprint-reader-trailer-poster.jpg)](https://ibrews.github.io/ue5-mcp/trailer/)
  • Network accessline 15
    **[Watch the 42-second trailer](https://ibrews.github.io/ue5-mcp/trailer/)** · A visual story of overload → compact brief → focused understanding. Clarifying captions and original music; works muted. [Transcript and production notes](docs/t
  • Network accessline 22
    The illustration shows the workflow. The numbers come from [this public graph](https://blueprintue.com/blueprint/6v52d8no/), checked with reader 0.2.2. The brief summarizes and omits detail; a saved session retains the original source for f
  • Network accessline 26
    [Open the live reader](https://ibrews.github.io/ue5-mcp/) · [Install the agent skill](skills/blueprint-reader/README.md#1-install-once) · [Share the reader](docs/blueprint-reader-launch.md)
  • Network accessline 58
    git clone https://github.com/ibrews/ue5-mcp.git
  • Network accessline 66
    | Client | First prompt | |---|---| | Codex | `Use $blueprint-reader to explain https://blueprintue.com/blueprint/6v52d8no/ and identify missing context.` |
  • Network accessline 67
    |---|---| | Codex | `Use $blueprint-reader to explain https://blueprintue.com/blueprint/6v52d8no/ and identify missing context.` | | Claude Code | `/blueprint-reader Explain https://blueprintue.com/blueprint/6v52d8no/ and identify missing c
  • Network accessline 68
    | Codex | `Use $blueprint-reader to explain https://blueprintue.com/blueprint/6v52d8no/ and identify missing context.` |
  • Network accessline 69
    | Claude Code | `/blueprint-reader Explain https://blueprintue.com/blueprint/6v52d8no/ and identify missing context.` |
  • Network accessline 83
    git clone https://github.com/ibrews/ue5-mcp.git ~/.claude/skills/ue5-mcp
  • Network accessline 90
    1. [Download this repo as a ZIP](https://github.com/ibrews/ue5-mcp/archive/refs/heads/main.zip)
  • Network accessline 108
    - Unreal Engine 5.x (this skill covers 5.7 and 5.8 specifically; most content applies to earlier and later versions) - An MCP server exposing UE5 functionality. Options:   - **[Epic's official `ModelContextProtocol` plugin](https://dev.epic
  • Network accessline 109
    - An MCP server exposing UE5 functionality. Options:   - **[Epic's official `ModelContextProtocol` plugin](https://dev.epicgames.com/documentation/en-us/unreal-engine)** — experimental, ships with UE 5.8, requires a source build of the engi
  • Network accessline 110
    - **[Epic's official `ModelContextProtocol` plugin](https://dev.epicgames.com/documentation/en-us/unreal-engine)** — experimental, ships with UE 5.8, requires a source build of the engine.
  • Network accessline 161
    If you like seeing this kind of thing get built and shared, [donations are always welcome](https://www.alexcoulombepresents.com/support) — they buy hardware, render time, and the freedom to keep giving most of this away.

SKILL.md

  • Network accessline 1196
    - [MCP specification](https://modelcontextprotocol.io) — protocol-level reference
  • Network accessline 1197
    - [Unreal Engine Python API reference](https://dev.epicgames.com/documentation/en-us/unreal-engine/python-api/) — for `unreal.*` module surface
  • Network accessline 1198
    - [Unreal Engine 5 Editor scripting](https://dev.epicgames.com/documentation/en-us/unreal-engine/scripting-the-unreal-editor-using-python) — Epic's Python guide
  • Network accessline 1199
    - [Niagara documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/overview-of-niagara-effects-for-unreal-engine) — for Niagara-specific module / parameter concepts
  • Network accessline 1200
    - [MetaSound documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/metasounds-in-unreal-engine) — for audio graph semantics

docs/blueprint-reader-launch.md

  • Network accessline 3
    Ready-to-adapt launch copy for Alex Coulombe Presents. These are drafts, not a record of posts sent. Link people to the [live browser reader](https://ibrews.github.io/ue5-mcp/) or [agent installation guide](https://github.com/ibrews/ue5-mcp
  • Network accessline 21
    [Try Blueprint Reader](https://ibrews.github.io/ue5-mcp/)
  • Network accessline 27
    [Try it](https://ibrews.github.io/ue5-mcp/)
  • Network accessline 35
    - [Social preview card](../skills/blueprint-reader/assets/branding/social-card.png): a simple title, connected nodes and reading lens, with the established ivory/green palette. Both the reader and trailer Pages URLs include Open Graph/Twitt
  • Network accessline 36
    - [42-second trailer](https://ibrews.github.io/ue5-mcp/trailer/): opens with the Claude story as source pages overwhelm an illustrated chat, shows an actual BlueprintUE import and Copy action, then follows the real widget connections with a
  • Network accessline 37
    - [README / social graphic](assets/blueprint-reader-overview.png): workflow illustration, generated with the built-in image tool. The [generation prompt](assets/blueprint-reader-overview-prompt.txt) is included for reproducibility of the ar
  • Network accessline 38
    - [Real interface screenshot](assets/blueprint-reader-local-ui.png): reader 0.2.2, 2026-10-21, the AI brief tab after ingesting Nicola's public [Extended dialogue system](https://blueprintue.com/blueprint/6v52d8no/).
  • Network accessline 45
    Send people to **[ibrews.github.io/ue5-mcp](https://ibrews.github.io/ue5-mcp/)**. The website parses text and files locally in a browser worker. For automatic BlueprintUE imports, our Vercel helper fetches the linked export; graph parsing s

docs/trailer/README.md

  • Network accessline 3
    [Watch the 42-second trailer](https://ibrews.github.io/ue5-mcp/trailer/) · [Poster](../assets/blueprint-reader-trailer-poster.jpg) · [Try the reader](https://ibrews.github.io/ue5-mcp/)
  • Network accessline 30
    - Captured on 2026-10-27 in the Codex in-app browser from the [live reader](https://ibrews.github.io/ue5-mcp/) and [BlueprintUE's graph view](https://blueprintue.com/render/6v52d8no/). Reader runtime: 0.3.1. The media revision does not chan
  • Network accessline 31
    - Demo: [Extended dialogue system, posted by Nicola](https://blueprintue.com/blueprint/6v52d8no/), a publicly accessible export. The graph visuals and limited export/analysis excerpts are attributed to Nicola; the underlying Blueprint remai

docs/trailer/index.html

  • Network accessline 11
    <link rel="icon" href="../favicon-32.png" type="image/png" sizes="32x32">   <link rel="apple-touch-icon" href="../apple-touch-icon.png" sizes="180x180">   <link rel="canonical" href="https://ibrews.github.io/ue5-mcp/trailer/">
  • Network accessline 12
    <link rel="apple-touch-icon" href="../apple-touch-icon.png" sizes="180x180">   <link rel="canonical" href="https://ibrews.github.io/ue5-mcp/trailer/">   <meta property="og:type" content="website">
  • Network accessline 13
    <link rel="canonical" href="https://ibrews.github.io/ue5-mcp/trailer/">
  • Network accessline 16
    <meta property="og:title" content="Blueprint Reader — Watch the 42-second trailer">   <meta property="og:description" content="From too much raw Blueprint code to a compact brief. See the real link import and graph inspection, then try it f
  • Network accessline 17
    <meta property="og:description" content="From too much raw Blueprint code to a compact brief. See the real link import and graph inspection, then try it free in your browser.">   <meta property="og:url" content="https://ibrews.github.io/ue5
  • Network accessline 18
    <meta property="og:url" content="https://ibrews.github.io/ue5-mcp/trailer/">
  • Network accessline 19
    <meta property="og:image" content="https://ibrews.github.io/ue5-mcp/social-card.png">
  • Network accessline 25
    <meta name="twitter:title" content="Blueprint Reader — 42-second trailer">   <meta name="twitter:description" content="Understand the graph. Keep the context small. See Blueprint Reader in action.">   <meta name="twitter:image" content="htt
  • Network accessline 26
    <meta name="twitter:description" content="Understand the graph. Keep the context small. See Blueprint Reader in action.">   <meta name="twitter:image" content="https://ibrews.github.io/ue5-mcp/social-card.png">   <meta name="twitter:image:a
  • Network accessline 27
    <meta name="twitter:image" content="https://ibrews.github.io/ue5-mcp/social-card.png">
  • Network accessline 56
    <a class="button" href="../">Try Blueprint Reader →</a>       <a href="blueprint-reader-trailer.mp4" download>Download MP4</a>       <a href="https://github.com/ibrews/ue5-mcp/blob/main/docs/trailer/README.md#transcript">Read the transcript
  • Network accessline 57
    <a href="blueprint-reader-trailer.mp4" download>Download MP4</a>       <a href="https://github.com/ibrews/ue5-mcp/blob/main/docs/trailer/README.md#transcript">Read the transcript</a>       <a href="https://github.com/ibrews/ue5-mcp">Source 
  • Network accessline 58
    <a href="https://github.com/ibrews/ue5-mcp/blob/main/docs/trailer/README.md#transcript">Read the transcript</a>
  • Network accessline 59
    <a href="https://github.com/ibrews/ue5-mcp">Source on GitHub</a>
  • Network accessline 60
    </nav>     <p class="note">42 seconds · Captions on screen · Original music · No voiceover. Real BlueprintUE nodes and captured browser interactions, connected by motion graphics showing overload, a compact brief and focused inspection. Cha
  • Network accessline 61
    <p class="note">42 seconds · Captions on screen · Original music · No voiceover. Real BlueprintUE nodes and captured browser interactions, connected by motion graphics showing overload, a compact brief and focused inspection. Chat/meter/wid

docs/trailer/render.py

  • Executable scriptline 1
    #!/usr/bin/env python3

docs/trailer/render_motion.py

  • Executable scriptline 1
    #!/usr/bin/env python3

docs/trailer/render_visual.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/blueprint-reader/README.md

  • Network accessline 3
    **[Open Blueprint Reader in your browser →](https://ibrews.github.io/ue5-mcp/)** Free, no account or installation.
  • Network accessline 9
    [![Watch the 42-second Blueprint Reader trailer.](../../docs/assets/blueprint-reader-trailer-poster.jpg)](https://ibrews.github.io/ue5-mcp/trailer/)
  • Network accessline 11
    **[Watch the trailer](https://ibrews.github.io/ue5-mcp/trailer/)** · Real nodes and an actual link import, with motion showing source overload → compact brief → focused inspection. Clarifying captions and original music. [Transcript](../../
  • Network accessline 15
    **A real example:** [this public 30-node graph](https://blueprintue.com/blueprint/6v52d8no/) produced a 1,336-byte brief from 81,358 bytes of source with reader 0.2.2. This is a summary, not lossless compression or a token-count guarantee. 
  • Network accessline 19
    Open the [live browser edition](https://ibrews.github.io/ue5-mcp/) and click **Try a sample graph**, or paste your own Blueprint clipboard text. **Read Blueprint** stays neutral and disabled until the active input contains recognizable comp
  • Network accessline 53
    git clone https://github.com/ibrews/ue5-mcp.git
  • Network accessline 66
    New-Item -ItemType Directory -Force D:\GitHub | Out-Null Set-Location D:\GitHub git clone https://github.com/ibrews/ue5-mcp.git
  • Network accessline 67
    Set-Location D:\GitHub git clone https://github.com/ibrews/ue5-mcp.git Set-Location D:\GitHub\ue5-mcp\skills\blueprint-reader
  • Network accessline 68
    git clone https://github.com/ibrews/ue5-mcp.git
  • Network accessline 86
    `~` means your user profile directory. These locations follow the [Codex local-skill documentation](https://developers.openai.com/codex/skills/) and [Claude Code personal-skill documentation](https://code.claude.com/docs/en/skills). Claude 
  • Network accessline 97
    Use $blueprint-reader to explain https://blueprintue.com/blueprint/6v52d8no/.
  • Network accessline 104
    /blueprint-reader Explain https://blueprintue.com/blueprint/6v52d8no/.
  • Network accessline 118
    Open the `http://127.0.0.1:PORT` address printed in the terminal. Paste clipboard text, choose text files, reopen a saved session, or enter a public/unlisted BlueprintUE link. Use **Read Blueprint**, then **Copy AI brief**. This also works 
  • Network accessline 127
    ![Actual Blueprint Reader interface showing a BlueprintUE link, 30 nodes, 107 pins, an overview and the AI brief tab.](https://raw.githubusercontent.com/ibrews/ue5-mcp/main/docs/assets/blueprint-reader-local-ui.png)
  • Network accessline 129
    Captured from reader 0.2.2 on 2026-10-21 using Nicola's public [Extended dialogue system](https://blueprintue.com/blueprint/6v52d8no/) export. This graph has no matches for the reader's supported improvement checks, and its missing ForEachL
  • Network accessline 135
    Yes: **[ibrews.github.io/ue5-mcp](https://ibrews.github.io/ue5-mcp/)** is the browser edition. A `127.0.0.1` address still points to the optional local Node page on your own computer; it is not a shareable address.
  • Network accessline 141
    For a no-install start, [open the live reader](https://ibrews.github.io/ue5-mcp/) and choose **Try a sample graph**. Its two branch outcomes deliberately enter the same destination; use **Inspect evidence** to see the exact pins.
  • Network accessline 148
    node scripts/read-blueprint.mjs "https://blueprintue.com/blueprint/6v52d8no/"
  • Network accessline 225
    The core reader and local page are free. Paid education, worked examples, review clinics and hands-on support are the intended complementary offering; no paid tier is needed to use this tool. No pricing or commercial service launch is annou

skills/blueprint-reader/SKILL.md

  • Network accessline 13
    For a user who wants no installation, use the [browser edition](https://ibrews.github.io/ue5-mcp/). It parses raw text/files and saved sessions locally in a worker. Its BlueprintUE link mode fetches exports automatically through our hosted 
  • Network accessline 20
    node scripts/read-blueprint.mjs "https://blueprintue.com/blueprint/ID/" --brief

skills/blueprint-reader/assets/app.js

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/assets/branding/favicon.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">

skills/blueprint-reader/assets/branding/generate-icons.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/blueprint-reader/assets/index.html

  • Network accessline 18
    <div class="mode" role="group" aria-label="Source type"><button type="button" id="paste-mode" aria-pressed="true">Paste text</button><button type="button" id="link-mode" aria-pressed="false">BlueprintUE link</button></div>         <div id="
  • Network accessline 19
    <div id="paste-input"><label for="source-text">Blueprint clipboard text or native graph JSON</label><textarea id="source-text" rows="11" spellcheck="false" placeholder="Begin Object Class=/Script/BlueprintGraph…&#10;    …&#10;End Object"></
  • Network accessline 20
    <div id="link-input" hidden><label for="source-url">Public or unlisted BlueprintUE URL</label><input id="source-url" type="url" placeholder="https://blueprintue.com/blueprint/…/"><p class="hint">The export is fetched directly from Blueprint

skills/blueprint-reader/assets/local-app.js

  • Network accessline 1
    import { startApp } from './app.js'; async function request(path, body) {   const response = await fetch(path, body ? { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) } : {});
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    async function request(path, body) {   const response = await fetch(path, body ? { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) } : {});   const data = await response.json();
  • Network accessline 3
    const response = await fetch(path, body ? { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) } : {});
  • Network accessline 10
    inspect: params => request('/api/inspect?' + new URLSearchParams(params)),   async download(kind, id) {     const response = await fetch('/api/download?' + new URLSearchParams({ kind, id }));
  • Network accessline 11
    async download(kind, id) {     const response = await fetch('/api/download?' + new URLSearchParams({ kind, id }));     if (!response.ok) throw new Error((await response.json()).error);
  • Network accessline 12
    const response = await fetch('/api/download?' + new URLSearchParams({ kind, id }));

skills/blueprint-reader/assets/native-input.js

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/assets/source-input.js

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/helper/api.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/helper/build.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 16
    outputDirectory: 'public', functions: { 'api/blueprint.mjs': { maxDuration: 30 } } }, null, 2)); const { version } = JSON.parse(await readFile(root + 'package.json', 'utf8')); await writeFile(out + 'public/index.html', '<!doctype html><titl
  • Network accessline 17
    const { version } = JSON.parse(await readFile(root + 'package.json', 'utf8')); await writeFile(out + 'public/index.html', '<!doctype html><title>Blueprint Reader fetch helper</title><p>BlueprintUE export fetching only. <a href="https://ibre
  • Network accessline 18
    await writeFile(out + 'public/index.html', '<!doctype html><title>Blueprint Reader fetch helper</title><p>BlueprintUE export fetching only. <a href="https://ibrews.github.io/ue5-mcp/">Open Blueprint Reader</a>.</p>');

skills/blueprint-reader/helper/handler.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 6
    export const ALLOWED_ORIGIN = 'https://ibrews.github.io';

skills/blueprint-reader/package-lock.json

  • Network accessline 23
    "node_modules/@esbuild/aix-ppc64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
  • Network accessline 24
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",       "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==",
  • Network accessline 25
    "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz",
  • Network accessline 40
    "node_modules/@esbuild/android-arm": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
  • Network accessline 41
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",       "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==",
  • Network accessline 42
    "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz",
  • Network accessline 57
    "node_modules/@esbuild/android-arm64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
  • Network accessline 58
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",       "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==",
  • Network accessline 59
    "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz",
  • Network accessline 74
    "node_modules/@esbuild/android-x64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
  • Network accessline 75
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",       "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==",
  • Network accessline 76
    "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz",
  • Network accessline 91
    "node_modules/@esbuild/darwin-arm64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
  • Network accessline 92
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",       "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==",
  • Network accessline 93
    "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz",
  • Network accessline 108
    "node_modules/@esbuild/darwin-x64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
  • Network accessline 109
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",       "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==",
  • Network accessline 110
    "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz",
  • Network accessline 125
    "node_modules/@esbuild/freebsd-arm64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
  • Network accessline 126
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",       "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==",
  • Network accessline 127
    "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz",
  • Network accessline 142
    "node_modules/@esbuild/freebsd-x64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
  • Network accessline 143
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",       "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==",
  • Network accessline 144
    "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz",
  • Network accessline 159
    "node_modules/@esbuild/linux-arm": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
  • Network accessline 160
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",       "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==",
  • Network accessline 161
    "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz",
  • Network accessline 176
    "node_modules/@esbuild/linux-arm64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
  • Network accessline 177
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",       "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==",
  • Network accessline 178
    "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz",
  • Network accessline 193
    "node_modules/@esbuild/linux-ia32": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
  • Network accessline 194
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",       "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==",
  • Network accessline 195
    "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz",
  • Network accessline 210
    "node_modules/@esbuild/linux-loong64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
  • Network accessline 211
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",       "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==",
  • Network accessline 212
    "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz",
  • Network accessline 227
    "node_modules/@esbuild/linux-mips64el": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
  • Network accessline 228
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",       "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==",
  • Network accessline 229
    "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz",
  • Network accessline 244
    "node_modules/@esbuild/linux-ppc64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
  • Network accessline 245
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",       "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==",
  • Network accessline 246
    "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz",
  • Network accessline 261
    "node_modules/@esbuild/linux-riscv64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
  • Network accessline 262
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",       "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==",
  • Network accessline 263
    "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz",
  • Network accessline 278
    "node_modules/@esbuild/linux-s390x": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
  • Network accessline 279
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",       "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==",
  • Network accessline 280
    "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz",
  • Network accessline 295
    "node_modules/@esbuild/linux-x64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
  • Network accessline 296
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",       "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==",
  • Network accessline 297
    "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz",
  • Network accessline 312
    "node_modules/@esbuild/netbsd-arm64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
  • Network accessline 313
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",       "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==",
  • Network accessline 314
    "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz",
  • Network accessline 329
    "node_modules/@esbuild/netbsd-x64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
  • Network accessline 330
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",       "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==",
  • Network accessline 331
    "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz",
  • Network accessline 346
    "node_modules/@esbuild/openbsd-arm64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
  • Network accessline 347
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",       "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==",
  • Network accessline 348
    "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz",
  • Network accessline 363
    "node_modules/@esbuild/openbsd-x64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
  • Network accessline 364
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",       "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==",
  • Network accessline 365
    "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz",
  • Network accessline 380
    "node_modules/@esbuild/openharmony-arm64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
  • Network accessline 381
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",       "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q
  • Network accessline 382
    "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz",
  • Network accessline 397
    "node_modules/@esbuild/sunos-x64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
  • Network accessline 398
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",       "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==",
  • Network accessline 399
    "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz",
  • Network accessline 414
    "node_modules/@esbuild/win32-arm64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
  • Network accessline 415
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",       "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==",
  • Network accessline 416
    "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz",
  • Network accessline 431
    "node_modules/@esbuild/win32-ia32": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
  • Network accessline 432
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",       "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==",
  • Network accessline 433
    "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz",
  • Network accessline 448
    "node_modules/@esbuild/win32-x64": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
  • Network accessline 449
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",       "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==",
  • Network accessline 450
    "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz",
  • Network accessline 465
    "node_modules/@lit-labs/ssr-dom-shim": {       "version": "1.6.0",       "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.6.0.tgz",
  • Network accessline 466
    "version": "1.6.0",       "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.6.0.tgz",       "integrity": "sha512-VHb0ALPMTlgKjM6yIxxoQNnpKyUKLD04VzeQdsiXkMqkvYlAHxq9glGLmgbb889/1GsohSOAjvQYoiBppXFqrQ==",
  • Network accessline 467
    "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.6.0.tgz",
  • Network accessline 471
    "node_modules/@lit/reactive-element": {       "version": "2.1.2",       "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz",
  • Network accessline 472
    "version": "2.1.2",       "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz",       "integrity": "sha512-pbCDiVMnne1lYUIaYNN5wrwQXDtHaYtg7YEFPeW+hws6U47WeFvISGUWekPGKWOP1ygrs0ef0o1VJMk1exos5A==",
  • Network accessline 473
    "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.1.2.tgz",
  • Network accessline 480
    "node_modules/@types/trusted-types": {       "version": "2.0.7",       "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
  • Network accessline 481
    "version": "2.0.7",       "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",       "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
  • Network accessline 482
    "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
  • Network accessline 486
    "node_modules/dom-serializer": {       "version": "2.0.0",       "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
  • Network accessline 487
    "version": "2.0.0",       "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",       "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
  • Network accessline 488
    "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
  • Network accessline 495
    },       "funding": {         "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
  • Network accessline 496
    "funding": {         "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"       }
  • Network accessline 497
    "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
  • Network accessline 500
    "node_modules/dom-serializer/node_modules/entities": {       "version": "4.5.0",       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
  • Network accessline 501
    "version": "4.5.0",       "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",       "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
  • Network accessline 502
    "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
  • Network accessline 507
    },       "funding": {         "url": "https://github.com/fb55/entities?sponsor=1"
  • Network accessline 508
    "funding": {         "url": "https://github.com/fb55/entities?sponsor=1"       }
  • Network accessline 509
    "url": "https://github.com/fb55/entities?sponsor=1"
  • Network accessline 512
    "node_modules/domelementtype": {       "version": "2.3.0",       "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
  • Network accessline 513
    "version": "2.3.0",       "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",       "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
  • Network accessline 514
    "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
  • Network accessline 517
    {           "type": "github",           "url": "https://github.com/sponsors/fb55"
  • Network accessline 518
    "type": "github",           "url": "https://github.com/sponsors/fb55"         }
  • Network accessline 519
    "url": "https://github.com/sponsors/fb55"
  • Network accessline 524
    "node_modules/domhandler": {       "version": "5.0.3",       "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
  • Network accessline 525
    "version": "5.0.3",       "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",       "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
  • Network accessline 526
    "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
  • Network accessline 534
    },       "funding": {         "url": "https://github.com/fb55/domhandler?sponsor=1"
  • Network accessline 535
    "funding": {         "url": "https://github.com/fb55/domhandler?sponsor=1"       }
  • Network accessline 536
    "url": "https://github.com/fb55/domhandler?sponsor=1"
  • Network accessline 539
    "node_modules/domutils": {       "version": "3.2.2",       "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
  • Network accessline 540
    "version": "3.2.2",       "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",       "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==",
  • Network accessline 541
    "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz",
  • Network accessline 548
    },       "funding": {         "url": "https://github.com/fb55/domutils?sponsor=1"
  • Network accessline 549
    "funding": {         "url": "https://github.com/fb55/domutils?sponsor=1"       }
  • Network accessline 550
    "url": "https://github.com/fb55/domutils?sponsor=1"
  • Network accessline 553
    "node_modules/entities": {       "version": "6.0.1",       "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
  • Network accessline 554
    "version": "6.0.1",       "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",       "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==",
  • Network accessline 555
    "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
  • Network accessline 560
    },       "funding": {         "url": "https://github.com/fb55/entities?sponsor=1"
  • Network accessline 561
    "funding": {         "url": "https://github.com/fb55/entities?sponsor=1"       }
  • Network accessline 562
    "url": "https://github.com/fb55/entities?sponsor=1"
  • Network accessline 565
    "node_modules/esbuild": {       "version": "0.28.2",       "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
  • Network accessline 566
    "version": "0.28.2",       "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",       "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==",
  • Network accessline 567
    "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz",
  • Network accessline 607
    "node_modules/htmlparser2": {       "version": "10.0.0",       "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
  • Network accessline 608
    "version": "10.0.0",       "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",       "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
  • Network accessline 609
    "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
  • Network accessline 610
    "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",       "funding": [         "https://github.com/fb55/htmlparser2?sponsor=1",
  • Network accessline 611
    "funding": [         "https://github.com/fb55/htmlparser2?sponsor=1",         {
  • Network accessline 612
    "https://github.com/fb55/htmlparser2?sponsor=1",
  • Network accessline 613
    {           "type": "github",           "url": "https://github.com/sponsors/fb55"
  • Network accessline 614
    "type": "github",           "url": "https://github.com/sponsors/fb55"         }
  • Network accessline 615
    "url": "https://github.com/sponsors/fb55"
  • Network accessline 626
    "node_modules/lit": {       "version": "3.3.3",       "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.3.tgz",
  • Network accessline 627
    "version": "3.3.3",       "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.3.tgz",       "integrity": "sha512-fycuvZg/hkpozL00lm1pEJH5nN/lr9ZXd6mJI2HSN4+Bzc+LDNdEApJ6HFbPkdFNHLvOplIIuJvxkS4XUxqirw==",
  • Network accessline 628
    "resolved": "https://registry.npmjs.org/lit/-/lit-3.3.3.tgz",
  • Network accessline 637
    "node_modules/lit-element": {       "version": "4.2.2",       "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz",
  • Network accessline 638
    "version": "4.2.2",       "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz",       "integrity": "sha512-aFKhNToWxoyhkNDmWZwEva2SlQia+jfG0fjIWV//YeTaWrVnOxD89dPKfigCUspXFmjzOEUQpOkejH5Ly6sG0w==",
  • Network accessline 639
    "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.2.2.tgz",
  • Network accessline 648
    "node_modules/lit-html": {       "version": "3.3.3",       "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.3.tgz",
  • Network accessline 649
    "version": "3.3.3",       "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.3.tgz",       "integrity": "sha512-el8M6jK2o3RXBnrSHX3ZKrsN8zEV63pSExTO1wYJz7QndGYZ8353e2a5PPX+qHe2aGayfnchQmkAojaWAREOIA==",
  • Network accessline 650
    "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.3.3.tgz",
  • Network accessline 657
    "node_modules/parsernostrum": {       "version": "1.2.6",       "resolved": "https://registry.npmjs.org/parsernostrum/-/parsernostrum-1.2.6.tgz",
  • Network accessline 658
    "version": "1.2.6",       "resolved": "https://registry.npmjs.org/parsernostrum/-/parsernostrum-1.2.6.tgz",       "integrity": "sha512-Ho+y3yoqVCHRtqsKVqltsv17MgjP8Np+VIC8nd2cyEAsko5hNiZZpA6mi0krvfv8XmrS+tOpra83d4UctJtmQg==",
  • Network accessline 659
    "resolved": "https://registry.npmjs.org/parsernostrum/-/parsernostrum-1.2.6.tgz",
  • Network accessline 663
    "node_modules/ueblueprint": {       "version": "3.0.0",       "resolved": "https://registry.npmjs.org/ueblueprint/-/ueblueprint-3.0.0.tgz",
  • Network accessline 664
    "version": "3.0.0",       "resolved": "https://registry.npmjs.org/ueblueprint/-/ueblueprint-3.0.0.tgz",       "integrity": "sha512-Q7R/XRCQsRBv+yPoIJOEw7PYQ66fLjSh+yCkOWMinqQzNNwWPG9Oq3y9tHsYflLc0uxLcoRK2MBw2klLnWaO8g==",
  • Network accessline 665
    "resolved": "https://registry.npmjs.org/ueblueprint/-/ueblueprint-3.0.0.tgz",

skills/blueprint-reader/package.json

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/references/browser-edition.md

  • Network accessline 3
    Live site: **https://ibrews.github.io/ue5-mcp/**. Version 0.3.0 introduced the static browser application; 0.3.1 adds automatic BlueprintUE imports through a dedicated fetch helper.
  • Network accessline 15
    BlueprintUE does not permit direct cross-origin browser reads. `web/fetch-link.mjs` sends only a validated BlueprintUE URL to **https://blueprint-reader-fetch.vercel.app/api/blueprint**. The helper uses the same bounded HTTP fetching and HT
  • Network accessline 19
    The page permits `connect-src https://blueprint-reader-fetch.vercel.app`, `script-src 'self'` and `worker-src 'self'`. The helper accepts GET/OPTIONS only, requires the exact `https://ibrews.github.io` Origin, validates the HTTPS BlueprintU
  • Network accessline 21
    Upstream requests have a 20-second deadline, at most five fetch attempts across redirects, and a 32 MiB HTML cap. JSON responses are capped at 4 MiB, below [Vercel's 4.5 MB function limit](https://vercel.com/docs/functions/limitations). The
  • Network accessline 34
    Open `http://127.0.0.1:8080/` for development. `dist/` is generated and ignored. The build bundles pinned dependencies, emits relative paths for project Pages hosting, copies MIT/third-party license notices and writes `version.json`. Use HT

skills/blueprint-reader/references/format.md

  • Network accessline 3
    The CLI uses UEBlueprint 3.0.0's ObjectEntity grammar without the browser renderer. Dependencies are pinned in package-lock.json. [UEBlueprint](https://github.com/barsdeveloper/ueblueprint) is MIT licensed; its 102 BlueprintGraph test expor
  • Network accessline 29
    The live test fetches [Extended dialogue system](https://blueprintue.com/blueprint/6v52d8no/) and checks its HandleScriptFunction graph: 30 nodes, 107 pins, 18 execution and 20 data wires. This fixture can change or disappear; a live-test f

skills/blueprint-reader/references/unrealbpinspect-evaluation.md

  • Network accessline 3
    **Decision: do not enable binary `.uasset` import yet.** The unmodified [UnrealBPInspect v1.1.1](https://github.com/MarcedForLife/UnrealBPInspect/releases/tag/v1.1.1)
  • Network accessline 4
    [UnrealBPInspect v1.1.1](https://github.com/MarcedForLife/UnrealBPInspect/releases/tag/v1.1.1)
  • Network accessline 44
    The upstream [`read_package_header`](https://github.com/MarcedForLife/UnrealBPInspect/blob/f239a655f9194e47e2ee5e19c1c373731d0cefea/src/parser.rs#L92)
  • Network accessline 112
    The upstream [UE 5.6+ coverage issue](https://github.com/MarcedForLife/UnrealBPInspect/issues/51)

skills/blueprint-reader/scripts/analysis.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/entrypoint.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/fetch-blueprint.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 13
    for (let hop = 0; hop < 5; hop++) {     const response = await fetchImpl(url, { redirect: 'manual', signal,       headers: { 'User-Agent': 'blueprint-reader/0.1 (+https://github.com/ibrews/ue5-mcp)', Accept: 'text/html' } });
  • Network accessline 14
    const response = await fetchImpl(url, { redirect: 'manual', signal,       headers: { 'User-Agent': 'blueprint-reader/0.1 (+https://github.com/ibrews/ue5-mcp)', Accept: 'text/html' } });     if (response.status >= 300 && response.status < 40
  • Network accessline 15
    headers: { 'User-Agent': 'blueprint-reader/0.1 (+https://github.com/ibrews/ue5-mcp)', Accept: 'text/html' } });

skills/blueprint-reader/scripts/flow.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/install-skill.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/blueprint-reader/scripts/native-graph.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/native-parity.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/blueprint-reader/scripts/parse-worker.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/parser-core.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/parser.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/read-blueprint.mjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/blueprint-reader/scripts/report.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/serve.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 24
    let current = null, busy = false;   return createServer(async (req, res) => {     const origin = `http://127.0.0.1:${req.socket.localPort}`;
  • Network accessline 25
    return createServer(async (req, res) => {     const origin = `http://127.0.0.1:${req.socket.localPort}`;     const send = (status, body, type = 'application/json', extra = {}) => {
  • Network accessline 26
    const origin = `http://127.0.0.1:${req.socket.localPort}`;
  • Network accessline 101
    server.requestTimeout = 120000;   server.on('error', error => { console.error(error.message); process.exitCode = 1; });   server.listen(port, '127.0.0.1', () => console.log(`Blueprint Reader: http://127.0.0.1:${server.address().port}\nLocal
  • Network accessline 102
    server.on('error', error => { console.error(error.message); process.exitCode = 1; });   server.listen(port, '127.0.0.1', () => console.log(`Blueprint Reader: http://127.0.0.1:${server.address().port}\nLocal only. Press Ctrl+C to stop.`)); }
  • Network accessline 103
    server.listen(port, '127.0.0.1', () => console.log(`Blueprint Reader: http://127.0.0.1:${server.address().port}\nLocal only. Press Ctrl+C to stop.`));

skills/blueprint-reader/scripts/session-core.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/session.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/source-core.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/sources.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/scripts/text.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/tests/browser.test.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 85
    test('raw input stays local; link import sends only a canonical URL and ignores stale pasted text', async t => {   const url = 'https://blueprintue.com/blueprint/6v52d8no/';   const network = t.mock.method(globalThis, 'fetch', async (endpoi
  • Network accessline 86
    const url = 'https://blueprintue.com/blueprint/6v52d8no/';   const network = t.mock.method(globalThis, 'fetch', async (endpoint, options) => {     assert.equal(new URL(endpoint).searchParams.get('url'), url);
  • Network accessline 94
    await reader.ingest({ text: example });   assert.equal(network.mock.callCount(), 0);   await assert.rejects(reader.ingest({ url: 'https://evil.example/blueprint/a/' }), /Expected an HTTPS/);
  • Network accessline 95
    assert.equal(network.mock.callCount(), 0);   await assert.rejects(reader.ingest({ url: 'https://evil.example/blueprint/a/' }), /Expected an HTTPS/);   await reader.ingest({ url: url + '?tracking=discarded#fragment', text: 'stale paste must 
  • Network accessline 96
    await assert.rejects(reader.ingest({ url: 'https://evil.example/blueprint/a/' }), /Expected an HTTPS/);
  • Network accessline 103
    test('link failures preserve prior graph and offer manual fallback; oversized/invalid helper responses fail', async () => {   const url = 'https://blueprintue.com/blueprint/6v52d8no/';
  • Network accessline 104
    const url = 'https://blueprintue.com/blueprint/6v52d8no/';
  • Network accessline 109
    await assert.rejects(fetchLinkedBlueprint(url, async () => new Response('x', { headers: { 'Content-Length': 5000000 } })), /too large/);   await assert.rejects(fetchLinkedBlueprint(url, async () => new Response('x'.repeat(4 * 1024 * 1024 + 
  • Network accessline 110
    await assert.rejects(fetchLinkedBlueprint(url, async () => new Response('x'.repeat(4 * 1024 * 1024 + 1))), /too large/);   await assert.rejects(fetchLinkedBlueprint(url, async () => Response.json({ text: example, source: { url: 'https://evi
  • Network accessline 111
    await assert.rejects(fetchLinkedBlueprint(url, async () => Response.json({ text: example, source: { url: 'https://evil.example/' } })), /Expected an HTTPS/);
  • Network accessline 112
    await assert.rejects(fetchLinkedBlueprint(url, async () => Response.json({ text: example, source: { url: 'https://blueprintue.com/blueprint/other/' } })), /different Blueprint/);

skills/blueprint-reader/tests/corpus.test.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/tests/helper.test.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 3
    import { createHandler, ALLOWED_ORIGIN } from '../helper/handler.mjs'; import { fetchBlueprint } from '../scripts/fetch-blueprint.mjs'; const url = 'https://blueprintue.com/blueprint/example/';
  • Network accessline 4
    import { fetchBlueprint } from '../scripts/fetch-blueprint.mjs'; const url = 'https://blueprintue.com/blueprint/example/'; const request = (value = url, options = {}) => new Request('https://helper.example/api/blueprint?url=' + encodeURICom
  • Network accessline 5
    const url = 'https://blueprintue.com/blueprint/example/';
  • Network accessline 6
    const request = (value = url, options = {}) => new Request('https://helper.example/api/blueprint?url=' + encodeURIComponent(value), {
  • Network accessline 12
    let calls = 0;   const handler = createHandler(async () => { calls++; return { text: 'export', source }; });   for (const bad of ['http://blueprintue.com/blueprint/a/', 'https://evil.example/', 'https://blueprintue.com:8080/blueprint/a/', '
  • Network accessline 13
    const handler = createHandler(async () => { calls++; return { text: 'export', source }; });   for (const bad of ['http://blueprintue.com/blueprint/a/', 'https://evil.example/', 'https://blueprintue.com:8080/blueprint/a/', 'https://user@blue
  • Network accessline 14
    for (const bad of ['http://blueprintue.com/blueprint/a/', 'https://evil.example/', 'https://blueprintue.com:8080/blueprint/a/', 'https://user@blueprintue.com/blueprint/a/', 'https://blueprintue.com/profile/a/', 'https://127.0.0.1/blueprint/
  • Network accessline 16
    }   assert.equal((await handler(request(url, { method: 'POST', body: 'private graph' }))).status, 405);   const denied = await handler(request(url, { headers: { Origin: 'https://evil.example' } }));
  • Network accessline 17
    assert.equal((await handler(request(url, { method: 'POST', body: 'private graph' }))).status, 405);   const denied = await handler(request(url, { headers: { Origin: 'https://evil.example' } }));   assert.equal(denied.status, 403); assert.eq
  • Network accessline 18
    const denied = await handler(request(url, { headers: { Origin: 'https://evil.example' } }));
  • Network accessline 51
    test('shared fetcher revalidates redirects, caps streamed pages and decodes textarea once', async () => {   let calls = 0;   await assert.rejects(fetchBlueprint(url, async () => { calls++; return new Response(null, { status: 302, headers: {
  • Network accessline 52
    let calls = 0;   await assert.rejects(fetchBlueprint(url, async () => { calls++; return new Response(null, { status: 302, headers: { Location: 'https://127.0.0.1/' } }); }), /Expected an HTTPS/);   assert.equal(calls, 1);
  • Network accessline 53
    await assert.rejects(fetchBlueprint(url, async () => { calls++; return new Response(null, { status: 302, headers: { Location: 'https://127.0.0.1/' } }); }), /Expected an HTTPS/);

skills/blueprint-reader/tests/input-readiness.test.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 32
    test('only allowed BlueprintUE URL shapes are ready; input checks do not fetch them', () => {   for (const url of ['https://blueprintue.com/blueprint/6v52d8no/', 'https://www.blueprintue.com/render/test-1/?x=1#view']) {
  • Network accessline 33
    for (const url of ['https://blueprintue.com/blueprint/6v52d8no/', 'https://www.blueprintue.com/render/test-1/?x=1#view']) {
  • Network accessline 34
    assert.equal(inputProblem({ url }), null);   }   for (const url of ['https://blueprintue.com/', 'https://blueprintue.com/blueprint/', 'https://example.com/blueprint/test/',
  • Network accessline 35
    }   for (const url of ['https://blueprintue.com/', 'https://blueprintue.com/blueprint/', 'https://example.com/blueprint/test/',     'http://blueprintue.com/blueprint/test/', 'https://blueprintue.com.evil.test/blueprint/test/',
  • Network accessline 36
    for (const url of ['https://blueprintue.com/', 'https://blueprintue.com/blueprint/', 'https://example.com/blueprint/test/',
  • Network accessline 37
    'http://blueprintue.com/blueprint/test/', 'https://blueprintue.com.evil.test/blueprint/test/',
  • Network accessline 38
    'https://user:pass@blueprintue.com/blueprint/test/', 'https://blueprintue.com:444/blueprint/test/', 'not a link']) {

skills/blueprint-reader/tests/install.test.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/tests/intake.test.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 87
    const dir = await mkdtemp(join(tmpdir(), 'blueprint-session-')); t.after(() => rm(dir, { recursive: true, force: true }));   const path = join(dir, 'saved.json');   const sources = [{ text: raw, source: { name: 'test', url: 'https://invalid
  • Network accessline 88
    const path = join(dir, 'saved.json');   const sources = [{ text: raw, source: { name: 'test', url: 'https://invalid.test/no-refetch', extraneous: true } }];   await saveSession(path, sources);
  • Network accessline 89
    const sources = [{ text: raw, source: { name: 'test', url: 'https://invalid.test/no-refetch', extraneous: true } }];
  • Network accessline 115
    await new Promise(resolve => server.listen(0, '127.0.0.1', resolve));   t.after(() => new Promise(resolve => { server.closeAllConnections(); server.close(resolve); }));   const origin = `http://127.0.0.1:${server.address().port}`;
  • Network accessline 116
    t.after(() => new Promise(resolve => { server.closeAllConnections(); server.close(resolve); }));   const origin = `http://127.0.0.1:${server.address().port}`;   const post = (body, headers = {}) => fetch(origin + '/api/ingest', { method: 'P
  • Network accessline 117
    const origin = `http://127.0.0.1:${server.address().port}`;   const post = (body, headers = {}) => fetch(origin + '/api/ingest', { method: 'POST', headers: { origin, 'content-type': 'application/json', ...headers }, body: JSON.stringify(bod
  • Network accessline 118
    const post = (body, headers = {}) => fetch(origin + '/api/ingest', { method: 'POST', headers: { origin, 'content-type': 'application/json', ...headers }, body: JSON.stringify(body) });
  • Network accessline 119
    const wrongHost = await new Promise((resolve, reject) => get(origin, { headers: { host: 'evil.test' } }, res => { res.resume(); resolve(res.statusCode); }).on('error', reject));   assert.equal(wrongHost, 403);   assert.equal((await post({ t
  • Network accessline 120
    assert.equal(wrongHost, 403);   assert.equal((await post({ text: raw }, { origin: 'https://evil.test' })).status, 403);   assert.equal((await post({ url: 'file:///etc/passwd' })).status, 400);
  • Network accessline 121
    assert.equal((await post({ text: raw }, { origin: 'https://evil.test' })).status, 403);
  • Network accessline 123
    const res = await post({ text: raw, budget: 2000 }); assert.equal(res.status, 200);   const first = await res.json(); assert.equal(first.analysis.stats.nodes, 1); assert.ok(first.brief_bytes <= 2000); assert.doesNotMatch(first.brief, /Begin
  • Network accessline 124
    const first = await res.json(); assert.equal(first.analysis.stats.nodes, 1); assert.ok(first.brief_bytes <= 2000); assert.doesNotMatch(first.brief, /Begin Object/);   const inspect = await (await fetch(`${origin}/api/inspect?id=${first.id}&
  • Network accessline 125
    const inspect = await (await fetch(`${origin}/api/inspect?id=${first.id}&graph=s1:g1&node=Start`)).json(); assert.match(inspect.text, /Start/);
  • Network accessline 126
    const saved = await (await fetch(`${origin}/api/download?id=${first.id}&kind=session`)).json(); assert.equal(saved.sources[0].text, raw);
  • Network accessline 127
    assert.equal((await post({ text: 'invalid' })).status, 400);   assert.equal((await fetch(`${origin}/api/download?id=${first.id}&kind=brief`)).status, 200, 'failed parsing must preserve previous session');   const restored = await post({ fil
  • Network accessline 128
    assert.equal((await fetch(`${origin}/api/download?id=${first.id}&kind=brief`)).status, 200, 'failed parsing must preserve previous session');
  • Network accessline 129
    const restored = await post({ files: [{ session: saved }] }); assert.equal(restored.status, 200);   assert.equal((await restored.json()).analysis.stats.nodes, 1);   assert.equal((await fetch(`${origin}/api/download?id=${first.id}&kind=brief
  • Network accessline 130
    assert.equal((await restored.json()).analysis.stats.nodes, 1);   assert.equal((await fetch(`${origin}/api/download?id=${first.id}&kind=brief`)).status, 404);   const page = await fetch(origin); assert.match(page.headers.get('content-securit
  • Network accessline 131
    assert.equal((await fetch(`${origin}/api/download?id=${first.id}&kind=brief`)).status, 404);
  • Network accessline 132
    const page = await fetch(origin); assert.match(page.headers.get('content-security-policy'), /frame-ancestors 'none'/);

skills/blueprint-reader/tests/live/blueprintue.test.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 8
    test('public BlueprintUE dialogue graph: real HTML extraction through connected graph', async () => {   const loaded = await fetchBlueprint('https://blueprintue.com/blueprint/6v52d8no/');
  • Network accessline 9
    const loaded = await fetchBlueprint('https://blueprintue.com/blueprint/6v52d8no/');

skills/blueprint-reader/tests/manual/evaluate-uasset.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Possible obfuscationline 27
    if len(data) < 52 or data[:4] != b'\xc1\x83\x2a\x9e':

skills/blueprint-reader/tests/native.test.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/tests/reader.test.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 108
    test('URL validation rejects unrelated hosts, credentials, and redirect escapes', async () => {   for (const url of ['http://blueprintue.com/blueprint/abc/', 'https://example.com/blueprint/abc/', 'https://blueprintue.com@evil.test/blueprint
  • Network accessline 109
    for (const url of ['http://blueprintue.com/blueprint/abc/', 'https://example.com/blueprint/abc/', 'https://blueprintue.com@evil.test/blueprint/abc/', 'https://blueprintue.com:8080/blueprint/abc/']) assert.throws(() => blueprintURL(url));
  • Network accessline 110
    await assert.rejects(fetchBlueprint('https://blueprintue.com/blueprint/abc/', async () => new Response(null, { status: 302, headers: { location: 'https://evil.test/' } })), /Expected an HTTPS/);

skills/blueprint-reader/web/app.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/web/build.mjs

  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 3
    import { mkdir, readFile, writeFile, copyFile, rm } from 'node:fs/promises';
  • Network accessline 25
    for (const file of brandFiles.filter(file => file !== 'social-card.png')) replace(`href="/${file}"`, `href="./${file}"`); replace('src="/favicon.svg"', 'src="./favicon.svg"'); replace('</head>', `<link rel="canonical" href="https://ibrews.g
  • Network accessline 26
    replace('src="/favicon.svg"', 'src="./favicon.svg"'); replace('</head>', `<link rel="canonical" href="https://ibrews.github.io/ue5-mcp/"> <meta property="og:type" content="website">
  • Network accessline 27
    replace('</head>', `<link rel="canonical" href="https://ibrews.github.io/ue5-mcp/">
  • Network accessline 30
    <meta property="og:title" content="Blueprint Reader — Understand the graph. Keep the context small."> <meta property="og:description" content="Turn Unreal Blueprint text or a BlueprintUE link into a compact brief for Codex or Claude. Free a
  • Network accessline 31
    <meta property="og:description" content="Turn Unreal Blueprint text or a BlueprintUE link into a compact brief for Codex or Claude. Free and open source. Parsing stays in your browser."> <meta property="og:url" content="https://ibrews.githu
  • Network accessline 32
    <meta property="og:url" content="https://ibrews.github.io/ue5-mcp/">
  • Network accessline 33
    <meta property="og:image" content="https://ibrews.github.io/ue5-mcp/social-card.png">
  • Network accessline 39
    <meta name="twitter:title" content="Blueprint Reader"> <meta name="twitter:description" content="Understand the graph. Keep the context small. Free, open source, in your browser."> <meta name="twitter:image" content="https://ibrews.github.i
  • Network accessline 40
    <meta name="twitter:description" content="Understand the graph. Keep the context small. Free, open source, in your browser."> <meta name="twitter:image" content="https://ibrews.github.io/ue5-mcp/social-card.png"> <meta name="twitter:image:a
  • Network accessline 41
    <meta name="twitter:image" content="https://ibrews.github.io/ue5-mcp/social-card.png">
  • Network accessline 46
    replace('Runs on your computer', 'Parsing stays in your browser'); replace('Paste an export, drop in its macros, or bring a BlueprintUE link.', 'Paste an export, add its macros, or bring a BlueprintUE link.'); replace('</p></section>\n  <di
  • Network accessline 47
    replace('Paste an export, drop in its macros, or bring a BlueprintUE link.', 'Paste an export, add its macros, or bring a BlueprintUE link.'); replace('</p></section>\n  <div class="workspace">', '</p><div class="actions"><button class="pri
  • Network accessline 48
    replace('</p></section>\n  <div class="workspace">', '</p><div class="actions"><button class="primary" type="button" id="try-example">Try a sample graph</button><a href="https://github.com/ibrews/ue5-mcp/tree/main/skills/blueprint-reader#re
  • Network accessline 51
    replace('</p></div>\n        <label class="file-zone"', '</p><button id="open-blueprintue" type="button" class="button">Open BlueprintUE ↗</button> <button id="use-copied-text" type="button" class="button">Use copied text instead</button></
  • Network accessline 52
    replace('No AI API key. No Blueprint uploads. Pasted text stays in this local session; links contact BlueprintUE.', 'Pasted text and files stay in this tab. Link imports send the URL to our Vercel helper, which sees the export but does not 
  • Network accessline 53
    replace('BLUEPRINT READER <span>', 'BLUEPRINT READER <a href="https://github.com/ibrews/ue5-mcp" target="_blank" rel="noopener noreferrer">Source on GitHub</a> <span>');

skills/blueprint-reader/web/client.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/web/config.mjs

  • Executable scriptline 1
    Executable file
  • Network accessline 2
    export const FETCH_HELPER = 'https://blueprint-reader-fetch.vercel.app/api/blueprint';

skills/blueprint-reader/web/engine.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/web/example.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/web/fetch-link.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/web/lit-tags.mjs

  • Executable scriptline 1
    Executable file

skills/blueprint-reader/web/worker.mjs

  • Executable scriptline 1
    Executable file

skills/ue5-mcp/SKILL.md

  • Network accessline 1196
    - [MCP specification](https://modelcontextprotocol.io) — protocol-level reference
  • Network accessline 1197
    - [Unreal Engine Python API reference](https://dev.epicgames.com/documentation/en-us/unreal-engine/python-api/) — for `unreal.*` module surface
  • Network accessline 1198
    - [Unreal Engine 5 Editor scripting](https://dev.epicgames.com/documentation/en-us/unreal-engine/scripting-the-unreal-editor-using-python) — Epic's Python guide
  • Network accessline 1199
    - [Niagara documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/overview-of-niagara-effects-for-unreal-engine) — for Niagara-specific module / parameter concepts
  • Network accessline 1200
    - [MetaSound documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/metasounds-in-unreal-engine) — for audio graph semantics

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 1 fact
Signal confidence: 212 facts

and 162 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/plugin.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.