dcc-mcp-epic
Local-first, typed Epic Games Launcher / Fab / Unreal project adapter for DCC-MCP. It follows the LiquiGen adapter pattern: exact runtime binding, versioned commands, read-before-write policy, resumable operation results, and no generic UI automation fallback.
Current 0.2 boundary
- Installed UE inventory: available, read-only, from Epic
.itemmanifests. - UE installation integrity checks: available, read-only, verifies the editor binary.
- UE 5.5 project verification: available, read-only.
- UE install/update: plan-only; returns
human_requireduntil a supported native Launcher bridge is verified. - Exact Launcher UI actions: available through a declared
dcc-cuahook for bounded click/key/scroll/text actions. The request requires a live PID/HWND/executable tuple, a known input backend, and post-action evidence; semantic selectors and generic automation are rejected. - dcc-cua preflight: available as a read-only
cua-preflightCLI/MCP tool. It checks the official runtime, ping, visual diagnostics, and exact window binding before any UI action; degraded diagnostics are reported as blocked instead of being retried as input. - Fab search: read-only local index search. Fab download/export are available only through a declared user-owned hook; the adapter never automates login, CAPTCHA, 2FA, purchase, or license acceptance.
- Free Fab catalog: available through a read-only official/native provider hook; the adapter does not scrape the storefront or handle credentials.
- Local Fab library index: available, read-only, when Epic's
listings_v1.dbexists. - Multi-source Fab inventory: available, read-only, merges explicitly selected
indexes and can discover
listings_v1.dbbelow caller-approved roots. - Fab Add to My Library: available through a declared user-owned hook for explicitly-free listings, with bounded batch support (up to 100 IDs), exact optional Launcher identity, and mandatory post-action ownership evidence.
- Fab library sync: available through a scoped user-owned hook keyed to the Launcher PID and approved cache/index roots; the adapter never edits Epic's databases directly.
- Free asset sync: one confirmation-gated, bounded workflow can add up to 100
explicitly-free listings to My Library, download compatible formats, verify
local state, and optionally import into a scoped UE project. It advertises
cua_calls_expected: 0; the provider hook performs native/API work and returns per-asset evidence. - Fab asset detail: read-only listing metadata plus cache evidence for one asset, available through a typed hook.
- Fab download status: available, read-only, re-reads ownership, path and cache evidence after a user-owned download hook.
- Fab batch download status: bounded (up to 100 IDs), merges multiple local indexes and returns per-asset evidence through a typed hook.
- Cached Fab import: available for already-owned/downloaded Unreal Content; dry-run, explicit confirmation, VaultCache-root enforcement, no-overwrite behavior, and per-file provenance hashes are built in. FBX/GLTF/OBJ/USD source downloads with textures are also preserved for Unreal's importer.
- Generic CUA fallback: disabled.
- Self-owned hook bridge: supported through the fixed
epic.hook.v1manifest contract, with dry-run and explicit confirmation as defaults. - Typed Fab download request: policy-checks a free, owned asset and dispatches a fixed payload to a declared user-owned hook; completion still needs fresh library/project evidence.
- Local Fab search: read-only full-text/category/format filters across merged indexes, with owned/downloaded-only selectors.
- Typed engine requests: install, update, download, verify, and launch hooks expose scoped payloads while preserving read-before-write plans.
- Typed Fab/project requests: export, one-asset import, batch import, and project import hooks enforce explicit roots, formats, and confirmation.
- Typed UE-native Fab batch Add to Project: up to 100 free, owned IDs are dispatched to a hook that must execute one official Add to Project action per asset and return per-asset evidence.
- Bounded batch download request: up to 100 free, owned asset IDs can be sent
to one user-owned hook, with per-asset verification required afterwards.
UE-native content is rejected for this operation because Fab Launcher uses
Add to Project instead; use
fab-add-to-project-requestor the boundedfab-add-to-project-batch-requestfor UE content. - Hook contract introspection:
hook-contract/epic_hook_contractreturns the stableepic.hook.v1operation list, required fields, mutation flags, and confirmation defaults for self-owned integrations. Generichook-invokecalls are rejected when a required field is missing. - Read-only hook requests: Launcher status, Fab search/library/source/detail
reads, single/batch download status, project import inventory, and the Fab
callback listener probe are available as typed
*_requestMCP tools and CLI commands. Each request includes the local evidence plan and reports no mutation. - CUA minimization: prefer
fab.catalog_free.requestfor discovery andfab.free_assets_sync.requestfor a single provider job.launcher.actionremains a bounded dcc-cua fallback for custom-rendered UI only. - Runtime selection:
runtime-doctorprefers a verified DCC-MCP sidecar when a compatible Python/MCP environment exists and otherwise selects the shared PyOxidizer bundle. Unreal's embedded Python is never reused.
Bundled agent skills
The adapter now ships two discoverable, progressive-loading skills under
src/dcc_mcp_epic/skills/:
$epic-fab— exact-windowdcc-cuapreflight, local Fab index discovery and search, bounded free-asset sync planning/execution, and project provenance inventory.$epic-unreal— UE project verification, installed-engine inventory, and a read-only Unreal Editor launch plan.
Their SKILL.md, tools.yaml, scripts, and OpenAI interface metadata are
included in wheels and source distributions. Use dcc-mcp-cli search and
dcc-mcp-cli load-skill to discover/load them when dcc-mcp-core is installed;
the direct dcc-mcp-epic FastMCP tools remain available independently. Fab
mutation tools default to execute=false and preserve the official-provider,
human-authentication boundary.
Built-in Fab worker
The package includes a language-neutral epic.hook.v1 worker. It performs
local Fab/library/status/inventory reads without UI automation and returns a
typed capability_unavailable result for account/download mutations until a
user-owned official/native provider is configured. This keeps completion claims
honest while avoiding CUA loops and private Launcher hooks.
Generate a manifest using the same Python runtime that will execute the adapter:
uv run dcc-mcp-epic-cli fab-worker-manifest --output .\fab-worker.json
uv run dcc-mcp-epic-cli hook-probe .\fab-worker.json
To delegate account/library/download operations, set
DCC_MCP_EPIC_FAB_PROVIDER_COMMAND to a JSON array whose first item is an
existing absolute executable. The provider receives the same fixed stdin
request and must return epic.hook.v1 JSON with a typed state and per-asset
evidence. DCC_MCP_EPIC_FAB_CATALOG_JSON may point to a caller-maintained
catalog snapshot for offline free-catalog filtering; snapshot entries must
explicitly carry price: 0 and free_listing: true.
Local build and tests
uv sync --extra dev
uv run pytest
uv run ruff check .
uv build
Test the new interface against this machine
uv run dcc-mcp-epic-cli capabilities
uv run dcc-mcp-epic-cli runtime-doctor
uv run dcc-mcp-epic-cli cua-preflight `
--pid <EpicLauncherPID> --hwnd <EpicLauncherHWND> `
--executable 'C:\Program Files\Epic Games\Launcher\Portal\Binaries\Win64\EpicGamesLauncher.exe'
uv run dcc-mcp-epic-cli hook-contract
uv run dcc-mcp-epic-cli engines
uv run dcc-mcp-epic-cli project-verify P:\game-test\ue-arpg\RiftKidsARPG.uproject
uv run dcc-mcp-epic-cli engine-verify
uv run dcc-mcp-epic-cli fab-library
uv run dcc-mcp-epic-cli fab-library-sources `
--search-root C:\ProgramData\Epic `
--search-root C:\Users\hallong\Downloads\Video `
--search-root F:\UE\EpicGamesLauncher
uv run dcc-mcp-epic-cli fab-download-status <asset-id> `
--database F:\UE\EpicGamesLauncher\VaultCache\FabLibrary\listings_v1.db `
--cache-root F:\UE\EpicGamesLauncher\VaultCache
uv run dcc-mcp-epic-cli fab-asset-inspect b8ff3ab4-0e81-4335-bbf0-fea15f6fcdfc
uv run dcc-mcp-epic-cli fab-asset-detail-request <asset-id> `
--hook-manifest C:\path\hook.json --search-root C:\ProgramData\Epic
uv run dcc-mcp-epic-cli fab-download-request <asset-id> P:\game-test\ue-arpg `
--allowed-root P:\game-test\ue-arpg --hook-manifest C:\path\hook.json `
--owned
uv run dcc-mcp-epic-cli fab-import-all-cached P:\game-test\ue-arpg `
--allowed-root P:\game-test\ue-arpg `
--database C:\ProgramData\Epic\EpicGamesLauncher\VaultCache\FabLibrary\listings_v1.db `
--database F:\UE\EpicGamesLauncher\VaultCache\FabLibrary\listings_v1.db `
--cache-root C:\ProgramData\Epic\EpicGamesLauncher\VaultCache `
--cache-root F:\UE\EpicGamesLauncher\VaultCache
uv run dcc-mcp-epic-cli fab-project-inventory P:\game-test\ue-arpg `
--allowed-root P:\game-test\ue-arpg
uv run dcc-mcp-epic-cli fab-launcher-probe --editor-pid <UnrealEditorPID>
uv run dcc-mcp-epic-cli fab-launcher-status-probe --launcher-pid <EpicLauncherPID>
uv run dcc-mcp-epic-cli engine-update-plan 5.5
uv run dcc-mcp-epic-cli engine-download-request 5.5 `
--hook-manifest C:\path\hook.json --install-root F:\UE\UE_5.5 `
--allowed-root F:\UE
uv run dcc-mcp-epic-cli fab-search Arrow `
--search-root C:\ProgramData\Epic --owned-only --downloaded-only
uv run dcc-mcp-epic-cli fab-search-request Arrow `
--hook-manifest C:\path\hook.json --search-root C:\ProgramData\Epic
uv run dcc-mcp-epic-cli fab-library-request `
--hook-manifest C:\path\hook.json --database C:\path\listings_v1.db
uv run dcc-mcp-epic-cli fab-add-to-library-request <asset-id> `
--hook-manifest C:\path\hook.json --free-listing `
--launcher-pid <EpicLauncherPID> --launcher-hwnd <EpicLauncherHWND> `
--launcher-executable C:\Program Files\Epic Games\Launcher\Portal\Binaries\Win64\EpicGamesLauncher.exe
uv run dcc-mcp-epic-cli fab-add-to-library-batch-request `
<asset-id-1> <asset-id-2> --hook-manifest C:\path\hook.json `
--free-listing --launcher-pid <EpicLauncherPID> `
--launcher-hwnd <EpicLauncherHWND> `
--launcher-executable C:\Program Files\Epic Games\Launcher\Portal\Binaries\Win64\EpicGamesLauncher.exe
uv run dcc-mcp-epic-cli fab-catalog-free-request "environment" `
--hook-manifest C:\path\hook.json --category Environment `
--format unreal-engine --limit 20
uv run dcc-mcp-epic-cli fab-free-assets-sync-request C:\path\free-assets.json `
--allowed-root P:\game-test\ue-arpg --hook-manifest C:\path\hook.json `
--mode library_download_and_project `
--project-path P:\game-test\ue-arpg
uv run dcc-mcp-epic-cli fab-library-sync-request `
--launcher-pid <EpicLauncherPID> --allowed-root F:\UE `
--hook-manifest C:\path\hook.json `
--database F:\UE\EpicGamesLauncher\VaultCache\FabLibrary\listings_v1.db `
--cache-root F:\UE\EpicGamesLauncher\VaultCache
uv run dcc-mcp-epic-cli fab-download-status-request <asset-id> `
--hook-manifest C:\path\hook.json --database C:\path\listings_v1.db
uv run dcc-mcp-epic-cli fab-download-status-batch-request `
<asset-id-1> <asset-id-2> --hook-manifest C:\path\hook.json `
--search-root C:\ProgramData\Epic --cache-root C:\ProgramData\Epic\EpicGamesLauncher\VaultCache
uv run dcc-mcp-epic-cli fab-import-inventory-request P:\game-test\ue-arpg `
--allowed-root P:\game-test\ue-arpg --hook-manifest C:\path\hook.json
uv run dcc-mcp-epic-cli fab-launcher-status-request `
--launcher-pid <EpicLauncherPID> --hook-manifest C:\path\hook.json
uv run dcc-mcp-epic-cli launcher-action-request `
--pid <EpicLauncherPID> --hwnd <EpicLauncherHWND> `
--executable C:\Program Files\Epic Games\Launcher\Portal\Binaries\Win64\EpicGamesLauncher.exe `
--version <LauncherVersion> `
--action-json '{"action":"keypress","keys":["ESC"],"input_backend_id":"windows.post_message_key.v1"}' `
--hook-manifest C:\path\hook.json
uv run dcc-mcp-epic-cli fab-download-batch-request P:\game-test\ue-arpg `
<asset-id-1> <asset-id-2> --allowed-root P:\game-test\ue-arpg `
--hook-manifest C:\path\hook.json --owned
uv run dcc-mcp-epic-cli fab-add-to-project-request <asset-id> P:\game-test\ue-arpg `
--allowed-root P:\game-test\ue-arpg --hook-manifest C:\path\hook.json --owned
uv run dcc-mcp-epic-cli fab-add-to-project-batch-request P:\game-test\ue-arpg `
<asset-id-1> <asset-id-2> --allowed-root P:\game-test\ue-arpg `
--hook-manifest C:\path\hook.json --owned
uv run dcc-mcp-epic-cli fab-export-request <asset-id> P:\game-test\ue-arpg\Exports `
--allowed-root P:\game-test\ue-arpg --hook-manifest C:\path\hook.json --owned
uv run python scripts/probe_mcp.py
Start the MCP stdio server with:
uv run dcc-mcp-epic
When the shared DCC-MCP server is installed, expose the same adapter through its HTTP/gateway bridge without installing another gateway process:
dcc-mcp-server translate --stdio "uv run dcc-mcp-epic" --app-type epic `
--host 127.0.0.1 --port 0 --gateway-port 0 --no-register
The adapter is not affiliated with or endorsed by Epic Games. Epic Launcher, Fab, UE, and associated content remain subject to their own terms and licenses.
Release files for dcc-mcp-epic 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dcc_mcp_epic-0.2.1.tar.gz | 72.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dcc_mcp_epic-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 144.9 kB
Release files / dcc_mcp_epic-0.2.1.tar.gz
| Download URL | dcc_mcp_epic-0.2.1.tar.gz |
|---|---|
| Size | 72.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
db87c17d411f391b3978ebf1d6ec574ffcd7c0fb5077a66af4218e022dd9df31
|
|
BLAKE2b-256 checksum How to use checksums |
d32ca536b2d597b13edeca2077f474368958118602012c63c6d30ab566a2db79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / dcc_mcp_epic-0.2.1-py3-none-any.whl
| Download URL | dcc_mcp_epic-0.2.1-py3-none-any.whl |
|---|---|
| Size | 72.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fb05a3fbb7c7184f311a97a0ee14a60b882e25432a77072031b8632f28a5bd98
|
|
BLAKE2b-256 checksum How to use checksums |
d97a13c4f69b0c04e86716bf6c5a362c06b4cf09306038fbddc3591cc307475a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency log