MCP server · Audited from source
Unreal_mcp MCP server
by chir24/Unreal_mcpMIT licenceAudited 24 Oct 2026 · source 2652681fef03
Is it safe? No — BLOCK, grade F (56/100). It exposes 16 tools: 13 read, 3 write and 0 destructive. The audit recorded 29 findings (0 critical, 3 high, 5 medium, 18 low). Maintainer's description: A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine through the native C++ Automation Bridge plugin. Built with TypeScript and C++.
Cite
Cite this page
ModelsAtlas. “Unreal_mcp MCP server (ChiR24/Unreal_mcp)”. Retrieved 24 Oct 2026. https://modelsatlas.com/mcp/chir24/unreal-mcp
Why this is BLOCK. The audit found 0 critical and 3 high findings; the most severe is Code injection at src/utils/commands/console-command-policy-rules.ts:129. Each finding is listed below with its file and line.
Why this page is still public. People search for this server by name. Hiding it would leave them with the README's word alone; here they see what the code does. We list it so you can decide, and we do not show connect commands for BLOCK servers.
2 MCP servers are called Unreal-MCP. You are viewing ChiR24/Unreal_mcp. Compare all 2 →
- IvanMurzak/Unreal-MCP★ 46!CAUTION
- ChiR24/Unreal_mcp★ 975✕BLOCK
Trust audit
Audit 0.4.1 · full source read 24 Oct 2026
29 findings, listed below with the file and line each was found on. Grade A needs a sandboxed behavioural run too; this audit read the source only.
What the source does
- FilesystemDeclared7 observations
- NetworkDeclared6 observations
- ShellDeclared6 observations
- DependenciesNot pinnedSome ranges float
- SecretsFoundSee the findings
Findings (29)
Sorted by severity · the 25 most severe of 29 are listed
HIGHCode injectioncode.eval_exec · src/utils/commands/console-command-policy-rules.ts:129
'import subprocess', 'subprocess.', 'os.system', 'exec(', 'eval(',- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · src/utils/commands/console-command-policy-rules.ts:225
'os.system', 'exec(', 'eval(', '__import__', 'with open', 'open(',- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
HIGHPrompt injectionprompt.zero_width · CHANGELOG.md:1
# 📋 Changelog
- Why
- invisible characters in instruction text
- Fix
- strip non-printing characters
MEDIUMHard-coded secretssecret.generic · src/tools/catalog/capabilities/semantic/receipt-contract.test.ts:225
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · src/tools/catalog/capabilities/semantic/receipt-contract.test.ts:284
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · src/tools/catalog/capabilities/semantic/receipt-contract.test.ts:356
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · src/tools/catalog/capabilities/semantic/receipt-contract.test.ts:476
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
MEDIUMHard-coded secretssecret.generic · src/tools/catalog/capabilities/semantic/receipt-contract.test.ts:526
Excerpt withheld: it is a secret, and we never print one.
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWInventory / provenanceinv.suspicious_name · tests/unit/cross-transport/execute-payload-location.test.ts
execute-payload-location.test.ts
- Why
- member named after an attack tool
- Fix
- remove or justify
LOWInventory / provenanceinv.suspicious_name · tests/unit/tools/todo17-image-payload-budget.test.ts
todo17-image-payload-budget.test.ts
- Why
- member named after an attack tool
- Fix
- remove or justify
LOWCode injectioncode.eval_exec · src/utils/commands/command-validator.test.ts:22
['exec call', 'exec ('],- Why
- evaluates text as code
- Fix
- remove; use a parser or a dispatch table
LOWInsecure cryptocrypto.weak_hash · src/tools/catalog/capabilities/semantic/envelope.ts:55
return 'sha1:' + createHash('sha1').update(stableJsonStringify(data)).digest('hex');- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · scripts/canonical-registry/cpp-registry.ts:9
import { compareAscii } from '../../src/utils/serialization/ordering.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · scripts/canonical-registry/cpp-registry.ts:11
import type { ToolDefinition } from '../../src/tools/definitions/shared/tool-definition.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · scripts/canonical-registry/docs-reference.ts:11
import type { CapabilityRecord } from '../../src/tools/catalog/capabilities/model.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · scripts/canonical-registry/docs-reference.ts:12
import { sortById as byId } from '../../src/utils/serialization/ordering.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWFilesystem / pathfs.traversal · scripts/canonical-registry/native-shards.ts:30
import type { CapabilityRecord } from '../../src/tools/catalog/capabilities/model.js';- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · CHANGELOG.md:331
- **`unreal-engine-mcp-server proxy` keeps a native session across editor restarts.** A stdio server in front of the plugin's `/mcp` (`UNREAL_MCP_URL`, default `http://127.0.0.1:3000/mcp`): while the
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · README.md:104
| **Path** | Client → the plugin's Streamable HTTP server at `http://127.0.0.1:3000/mcp` | Client → `unreal-engine-mcp-server` (Node.js, stdio) → the plugin's WebSocket on `127.0.0.1:8090` |
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · README.md:156
claude mcp add --transport http unreal-engine http://127.0.0.1:3000/mcp --header "X-MCP-Capability-Token: <token>"
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · README.md:166
"url": "http://127.0.0.1:3000/mcp",
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWNetwork egressnet.raw_ip · README.md:198
The token is found the same way as on Route B (`MCP_AUTOMATION_CAPABILITY_TOKEN`, else the project's token file). `UNREAL_MCP_URL` points it at another endpoint (default `http://127.0.0.1:3000/mcp`).
- Why
- No further detail recorded for this rule.
- Fix
- —
LOWSupply chainsupply.unpinned · package.json
ws, zod, @types/node, @types/ws, @vitest/coverage-v8, ajv, eslint-plugin-n, ts-node
- Why
- 9 dependency range(s) float
- Fix
- pin exact versions or ship a lockfile
LOWPrompt injectionprompt.transfer_instruction · CHANGELOG.md:1291
- **Native MCP Streamable HTTP endpoint** — added an opt-in in-plugin `/mcp` server with JSON-RPC 2.0 initialize/tools/list/tools/call handling, POST/GET/DELETE routing, `Mcp-Session-Id` session track
- Why
- an instruction to move sensitive data to an outside destination
- Fix
- remove; a skill never needs the user's secrets off the machine
Tools it exposes
16 declared in source · 0 destructive
| Tool | What it does | Risk |
|---|---|---|
destinationPath | Content folder to import into | write |
newValue | Value you intend to set, for your reference | write |
variableName | Name of a variable to add | write |
Actors | Actors in the current level | read |
Assets | Project assets | read |
Project | Redacted project name, engine version, and content root | read |
Selection | Bounded list of selected actor handles | read |
assetPath | Content path of an asset to focus on | read |
blueprintPath | Content path of the Blueprint | read |
levelPath | Content path for the level | read |
objectPath | Content path of the object to inspect | read |
outputFormat | Render output image format | read |
propertyName | Name of the property to review | read |
sequencePath | Content path of the level sequence | read |
sourceFormat | Source file format | read |
unreal | FAKE TOOL | read |
Safer alternatives
chongdashu/unreal-mcp
Enable AI assistant clients like Cursor, Windsurf and Claude Desktop to control Unreal Engine through natural language using the Model Context Protocol (MCP).
runeape-sats/unreal-mcp
pure python Unreal Engine MCP server
Audit history
- ✕BLOCK F 56 / 100
First audit ·
2652681fef03
README badge
Badges show the current verdict, BLOCK included
A badge cannot be hidden by the maintainer while the verdict is BLOCK. Fix the findings, push, and the re-audit updates it.
Questions about Unreal_mcp MCP server
What is the Unreal_mcp MCP server?
What tools does Unreal_mcp expose?
Is Unreal_mcp safe to connect to an agent?
What credentials does Unreal_mcp need?
How does Unreal_mcp run?
How current is this page?
Which Unreal-MCP MCP server is the right one?
I already installed Unreal_mcp. What should I do?
Can the verdict change?
Sources
- ChiR24/Unreal_mcp on GitHub — the source we read, its licence, stars and activityObserved · 24 Oct 2026
- ModelsAtlas trust audit — BLOCK verdict for commit 2652681fef03Observed · 24 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What is the Unreal_mcp MCP server?
- What tools does Unreal_mcp expose?
- Is Unreal_mcp safe to connect to an agent?