Skip to main content

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.

Part of the DCC-MCP host matrix

dcc-mcp-epic — Epic Games Launcher, Fab and Unreal adapter for DCC-MCP — inspect engines, verify projects and search local asset libraries; engine install is plan-only.

It is one of 47 host adapters in the DCC-MCP catalog. Every adapter speaks the same MCP protocol and builds on the same core runtime contract; each one exposes the tools its own host needs on top of that.

This block is generated from the catalog entry in dcc-mcp-catalog.yml. Re-run the generator after changing the catalog.

Current 0.2 boundary

  • Installed UE inventory: available, read-only, from Epic .item manifests.
  • 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_required until a supported native Launcher bridge is verified.
  • Exact Launcher UI actions: available through a declared dcc-cua hook 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-preflight CLI/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.db exists.
  • Multi-source Fab inventory: available, read-only, merges explicitly selected indexes and can discover listings_v1.db below 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.v1 manifest 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-request or the bounded fab-add-to-project-batch-request for UE content.
  • Hook contract introspection: hook-contract / epic_hook_contract returns the stable epic.hook.v1 operation list, required fields, mutation flags, and confirmation defaults for self-owned integrations. Generic hook-invoke calls 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 *_request MCP tools and CLI commands. Each request includes the local evidence plan and reports no mutation.
  • CUA minimization: prefer fab.catalog_free.request for discovery and fab.free_assets_sync.request for a single provider job. launcher.action remains a bounded dcc-cua fallback for custom-rendered UI only.
  • Runtime selection: runtime-doctor prefers 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-window dcc-cua preflight, 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.

Metadata

Release files for dcc-mcp-epic 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dcc-mcp-epic 0.2.2
File Size Uploaded Provenance Actions
dcc_mcp_epic-0.2.2.tar.gz 73.2 kB With provenance Details for dcc_mcp_epic-0.2.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for dcc-mcp-epic 0.2.2
File Interpreter ABI Platform Actions
dcc_mcp_epic-0.2.2-py3-none-any.whl Python 3 none any Details for dcc_mcp_epic-0.2.2-py3-none-any.whl

Total release size: 146.3 kB

Release files / dcc_mcp_epic-0.2.2.tar.gz

Download URL dcc_mcp_epic-0.2.2.tar.gz
Size 73.2 kB
Tags Source
SHA-256 checksum
How to use checksums
e433f62a46fec78b9eda0f0f4e93e675f19ce7d740e692f563a3264c01a8b6d5
BLAKE2b-256 checksum
How to use checksums
253e8cab2f75e053643fcd6b7393cb34543b4c49b807322d1aa20c5f2570af5e
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 Oct 17, 2026.

Transparency log

Release files / dcc_mcp_epic-0.2.2-py3-none-any.whl

Download URL dcc_mcp_epic-0.2.2-py3-none-any.whl
Size 73.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d396045b2e9955d420f33103e6cf556755e2d2f43040b0409bebd192ec2ddf5c
BLAKE2b-256 checksum
How to use checksums
9b4cd9b9b48eb236eb0939f92e9f9a40fe033204d5d52b0340366dc2641b73c2
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 Oct 17, 2026.

Transparency log

Security for dcc-mcp-epic 0.2.2

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.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for dcc_mcp_epic-0.2.2.tar.gz

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 Oct 17, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page