unreal-engine-mcp-server 0.4.5 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.production +1 -1
- package/CHANGELOG.md +17 -0
- package/README.md +1 -2
- package/dist/index.js +21 -6
- package/dist/tools/consolidated-tool-definitions.d.ts +167 -0
- package/dist/tools/consolidated-tool-definitions.js +17 -3
- package/dist/tools/consolidated-tool-handlers.js +17 -0
- package/dist/tools/logs.d.ts +45 -0
- package/dist/tools/logs.js +262 -0
- package/dist/types/tool-types.d.ts +21 -1
- package/dist/utils/response-validator.js +64 -9
- package/docs/unreal-tool-test-cases.md +2 -0
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/index.ts +20 -6
- package/src/tools/consolidated-tool-definitions.ts +17 -2
- package/src/tools/consolidated-tool-handlers.ts +18 -1
- package/src/tools/logs.ts +267 -0
- package/src/types/tool-types.ts +16 -1
- package/src/utils/response-validator.ts +67 -8
package/.env.production
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.4.7] - 2025-11-16
|
|
6
|
+
### Added
|
|
7
|
+
- Output Log reading via `system_control` tool with `read_log` action. Supports filtering by category (comma-separated or array), log level (Error, Warning, Log, Verbose, VeryVerbose, All), line count (up to 2000), specific log path, include prefixes, and exclude categories. Automatically resolves the latest project log under Saved/Logs.
|
|
8
|
+
- New `src/tools/logs.ts` implementing robust log tailing, parsing (timestamp/category/level/message), and UE-specific internal entry filtering (e.g., excludes LogPython RESULT: blocks unless requested).
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- `system_control` tool schema: Added `read_log` action with full filter parameters to inputSchema; extended outputSchema with `logPath`, `entries` array, and `filteredCount`.
|
|
12
|
+
- Updated `src/tools/consolidated-tool-handlers.ts` to route `read_log` to LogTools without requiring UE connection (file-based).
|
|
13
|
+
- `src/index.ts`: Instantiates and passes LogTools to consolidated handler.
|
|
14
|
+
- Version bumped to 0.4.7 in package.json, package-lock.json, server.json, .env.production, and runtime config.
|
|
15
|
+
|
|
16
|
+
## [0.4.6] - 2025-10-04
|
|
17
|
+
### Fixed
|
|
18
|
+
- Fixed duplicate response output issue where tool responses were being displayed twice in MCP content
|
|
19
|
+
- Response validator now emits concise summaries in text content instead of duplicating full JSON payloads
|
|
20
|
+
- Structured content is preserved for validation and tests while user-facing output is streamlined
|
|
21
|
+
|
|
5
22
|
## [0.4.5] - 2025-10-03
|
|
6
23
|
### Added
|
|
7
24
|
- Expose `UE_PROJECT_PATH` environment variable across runtime config, Smithery manifest, and client example configs. This allows tools that need an absolute .uproject path (e.g., engine_start) to work without additional manual configuration.
|
package/README.md
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
[](https://github.com/modelcontextprotocol/sdk)
|
|
6
6
|
[](https://www.unrealengine.com/)
|
|
7
7
|
[](https://registry.modelcontextprotocol.io/)
|
|
8
|
-
[](https://smithery.ai/server/@ChiR24/unreal_mcp_server)
|
|
9
8
|
|
|
10
9
|
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal Engine via Remote Control API. Built with TypeScript and designed for game development automation.
|
|
11
10
|
|
|
@@ -145,7 +144,7 @@ Then enable Python execution in: Edit > Project Settings > Plugins > Remote Cont
|
|
|
145
144
|
| `create_effect` | Particles, Niagara, debug shapes |
|
|
146
145
|
| `manage_blueprint` | Create blueprints, add components |
|
|
147
146
|
| `build_environment` | Landscapes, terrain, foliage |
|
|
148
|
-
| `system_control` | Profiling, quality, UI, screenshots |
|
|
147
|
+
| `system_control` | Profiling, quality, UI, screenshots, Output Log reading |
|
|
149
148
|
| `console_command` | Direct console command execution |
|
|
150
149
|
| `manage_rc` | Remote Control presets |
|
|
151
150
|
| `manage_sequence` | Sequencer/cinematics |
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ import { SequenceTools } from './tools/sequence.js';
|
|
|
28
28
|
import { IntrospectionTools } from './tools/introspection.js';
|
|
29
29
|
import { VisualTools } from './tools/visual.js';
|
|
30
30
|
import { EngineTools } from './tools/engine.js';
|
|
31
|
+
import { LogTools } from './tools/logs.js';
|
|
31
32
|
import { consolidatedToolDefinitions } from './tools/consolidated-tool-definitions.js';
|
|
32
33
|
import { handleConsolidatedToolCall } from './tools/consolidated-tool-handlers.js';
|
|
33
34
|
import { prompts } from './prompts/index.js';
|
|
@@ -63,7 +64,7 @@ const CONFIG = {
|
|
|
63
64
|
RETRY_DELAY_MS: 2000,
|
|
64
65
|
// Server info
|
|
65
66
|
SERVER_NAME: 'unreal-engine-mcp',
|
|
66
|
-
SERVER_VERSION: '0.4.
|
|
67
|
+
SERVER_VERSION: '0.4.7',
|
|
67
68
|
// Monitoring
|
|
68
69
|
HEALTH_CHECK_INTERVAL_MS: 30000 // 30 seconds
|
|
69
70
|
};
|
|
@@ -206,6 +207,7 @@ export function createServer() {
|
|
|
206
207
|
const introspectionTools = new IntrospectionTools(bridge);
|
|
207
208
|
const visualTools = new VisualTools(bridge);
|
|
208
209
|
const engineTools = new EngineTools(bridge);
|
|
210
|
+
const logTools = new LogTools(bridge);
|
|
209
211
|
const server = new Server({
|
|
210
212
|
name: CONFIG.SERVER_NAME,
|
|
211
213
|
version: CONFIG.SERVER_VERSION
|
|
@@ -430,11 +432,23 @@ export function createServer() {
|
|
|
430
432
|
const { name } = request.params;
|
|
431
433
|
let args = request.params.arguments || {};
|
|
432
434
|
const startTime = Date.now();
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
435
|
+
let requiresEngine = true;
|
|
436
|
+
try {
|
|
437
|
+
const n = String(name);
|
|
438
|
+
if (n === 'system_control') {
|
|
439
|
+
const action = String((args || {}).action || '').trim();
|
|
440
|
+
if (action === 'read_log') {
|
|
441
|
+
requiresEngine = false;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
catch { }
|
|
446
|
+
if (requiresEngine) {
|
|
447
|
+
const connected = await ensureConnectedOnDemand();
|
|
448
|
+
if (!connected) {
|
|
449
|
+
trackPerformance(startTime, false);
|
|
450
|
+
return createNotConnectedResponse(name);
|
|
451
|
+
}
|
|
438
452
|
}
|
|
439
453
|
// Create tools object for handler
|
|
440
454
|
const tools = {
|
|
@@ -460,6 +474,7 @@ export function createServer() {
|
|
|
460
474
|
introspectionTools,
|
|
461
475
|
visualTools,
|
|
462
476
|
engineTools,
|
|
477
|
+
logTools,
|
|
463
478
|
// Elicitation (client-optional)
|
|
464
479
|
elicit: elicitation.elicit,
|
|
465
480
|
supportsElicitation: elicitation.supports,
|
|
@@ -90,6 +90,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
90
90
|
resolution?: undefined;
|
|
91
91
|
projectPath?: undefined;
|
|
92
92
|
editorExe?: undefined;
|
|
93
|
+
filter_category?: undefined;
|
|
94
|
+
filter_level?: undefined;
|
|
95
|
+
lines?: undefined;
|
|
96
|
+
log_path?: undefined;
|
|
97
|
+
include_prefixes?: undefined;
|
|
98
|
+
exclude_categories?: undefined;
|
|
93
99
|
command?: undefined;
|
|
94
100
|
presetPath?: undefined;
|
|
95
101
|
objectPath?: undefined;
|
|
@@ -186,6 +192,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
186
192
|
imagePath?: undefined;
|
|
187
193
|
imageBase64?: undefined;
|
|
188
194
|
pid?: undefined;
|
|
195
|
+
logPath?: undefined;
|
|
196
|
+
entries?: undefined;
|
|
197
|
+
filteredCount?: undefined;
|
|
189
198
|
command?: undefined;
|
|
190
199
|
result?: undefined;
|
|
191
200
|
info?: undefined;
|
|
@@ -340,6 +349,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
340
349
|
resolution?: undefined;
|
|
341
350
|
projectPath?: undefined;
|
|
342
351
|
editorExe?: undefined;
|
|
352
|
+
filter_category?: undefined;
|
|
353
|
+
filter_level?: undefined;
|
|
354
|
+
lines?: undefined;
|
|
355
|
+
log_path?: undefined;
|
|
356
|
+
include_prefixes?: undefined;
|
|
357
|
+
exclude_categories?: undefined;
|
|
343
358
|
command?: undefined;
|
|
344
359
|
presetPath?: undefined;
|
|
345
360
|
objectPath?: undefined;
|
|
@@ -416,6 +431,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
416
431
|
imagePath?: undefined;
|
|
417
432
|
imageBase64?: undefined;
|
|
418
433
|
pid?: undefined;
|
|
434
|
+
logPath?: undefined;
|
|
435
|
+
entries?: undefined;
|
|
436
|
+
filteredCount?: undefined;
|
|
419
437
|
command?: undefined;
|
|
420
438
|
result?: undefined;
|
|
421
439
|
info?: undefined;
|
|
@@ -550,6 +568,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
550
568
|
resolution?: undefined;
|
|
551
569
|
projectPath?: undefined;
|
|
552
570
|
editorExe?: undefined;
|
|
571
|
+
filter_category?: undefined;
|
|
572
|
+
filter_level?: undefined;
|
|
573
|
+
lines?: undefined;
|
|
574
|
+
log_path?: undefined;
|
|
575
|
+
include_prefixes?: undefined;
|
|
576
|
+
exclude_categories?: undefined;
|
|
553
577
|
command?: undefined;
|
|
554
578
|
presetPath?: undefined;
|
|
555
579
|
objectPath?: undefined;
|
|
@@ -632,6 +656,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
632
656
|
imagePath?: undefined;
|
|
633
657
|
imageBase64?: undefined;
|
|
634
658
|
pid?: undefined;
|
|
659
|
+
logPath?: undefined;
|
|
660
|
+
entries?: undefined;
|
|
661
|
+
filteredCount?: undefined;
|
|
635
662
|
command?: undefined;
|
|
636
663
|
result?: undefined;
|
|
637
664
|
info?: undefined;
|
|
@@ -775,6 +802,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
775
802
|
resolution?: undefined;
|
|
776
803
|
projectPath?: undefined;
|
|
777
804
|
editorExe?: undefined;
|
|
805
|
+
filter_category?: undefined;
|
|
806
|
+
filter_level?: undefined;
|
|
807
|
+
lines?: undefined;
|
|
808
|
+
log_path?: undefined;
|
|
809
|
+
include_prefixes?: undefined;
|
|
810
|
+
exclude_categories?: undefined;
|
|
778
811
|
command?: undefined;
|
|
779
812
|
presetPath?: undefined;
|
|
780
813
|
objectPath?: undefined;
|
|
@@ -854,6 +887,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
854
887
|
imagePath?: undefined;
|
|
855
888
|
imageBase64?: undefined;
|
|
856
889
|
pid?: undefined;
|
|
890
|
+
logPath?: undefined;
|
|
891
|
+
entries?: undefined;
|
|
892
|
+
filteredCount?: undefined;
|
|
857
893
|
command?: undefined;
|
|
858
894
|
result?: undefined;
|
|
859
895
|
info?: undefined;
|
|
@@ -978,6 +1014,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
978
1014
|
resolution?: undefined;
|
|
979
1015
|
projectPath?: undefined;
|
|
980
1016
|
editorExe?: undefined;
|
|
1017
|
+
filter_category?: undefined;
|
|
1018
|
+
filter_level?: undefined;
|
|
1019
|
+
lines?: undefined;
|
|
1020
|
+
log_path?: undefined;
|
|
1021
|
+
include_prefixes?: undefined;
|
|
1022
|
+
exclude_categories?: undefined;
|
|
981
1023
|
command?: undefined;
|
|
982
1024
|
presetPath?: undefined;
|
|
983
1025
|
objectPath?: undefined;
|
|
@@ -1054,6 +1096,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
1054
1096
|
imagePath?: undefined;
|
|
1055
1097
|
imageBase64?: undefined;
|
|
1056
1098
|
pid?: undefined;
|
|
1099
|
+
logPath?: undefined;
|
|
1100
|
+
entries?: undefined;
|
|
1101
|
+
filteredCount?: undefined;
|
|
1057
1102
|
command?: undefined;
|
|
1058
1103
|
result?: undefined;
|
|
1059
1104
|
info?: undefined;
|
|
@@ -1195,6 +1240,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
1195
1240
|
resolution?: undefined;
|
|
1196
1241
|
projectPath?: undefined;
|
|
1197
1242
|
editorExe?: undefined;
|
|
1243
|
+
filter_category?: undefined;
|
|
1244
|
+
filter_level?: undefined;
|
|
1245
|
+
lines?: undefined;
|
|
1246
|
+
log_path?: undefined;
|
|
1247
|
+
include_prefixes?: undefined;
|
|
1248
|
+
exclude_categories?: undefined;
|
|
1198
1249
|
command?: undefined;
|
|
1199
1250
|
presetPath?: undefined;
|
|
1200
1251
|
objectPath?: undefined;
|
|
@@ -1274,6 +1325,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
1274
1325
|
imagePath?: undefined;
|
|
1275
1326
|
imageBase64?: undefined;
|
|
1276
1327
|
pid?: undefined;
|
|
1328
|
+
logPath?: undefined;
|
|
1329
|
+
entries?: undefined;
|
|
1330
|
+
filteredCount?: undefined;
|
|
1277
1331
|
command?: undefined;
|
|
1278
1332
|
result?: undefined;
|
|
1279
1333
|
info?: undefined;
|
|
@@ -1386,6 +1440,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
1386
1440
|
resolution?: undefined;
|
|
1387
1441
|
projectPath?: undefined;
|
|
1388
1442
|
editorExe?: undefined;
|
|
1443
|
+
filter_category?: undefined;
|
|
1444
|
+
filter_level?: undefined;
|
|
1445
|
+
lines?: undefined;
|
|
1446
|
+
log_path?: undefined;
|
|
1447
|
+
include_prefixes?: undefined;
|
|
1448
|
+
exclude_categories?: undefined;
|
|
1389
1449
|
command?: undefined;
|
|
1390
1450
|
presetPath?: undefined;
|
|
1391
1451
|
objectPath?: undefined;
|
|
@@ -1459,6 +1519,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
1459
1519
|
imagePath?: undefined;
|
|
1460
1520
|
imageBase64?: undefined;
|
|
1461
1521
|
pid?: undefined;
|
|
1522
|
+
logPath?: undefined;
|
|
1523
|
+
entries?: undefined;
|
|
1524
|
+
filteredCount?: undefined;
|
|
1462
1525
|
command?: undefined;
|
|
1463
1526
|
result?: undefined;
|
|
1464
1527
|
info?: undefined;
|
|
@@ -1733,6 +1796,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
1733
1796
|
resolution?: undefined;
|
|
1734
1797
|
projectPath?: undefined;
|
|
1735
1798
|
editorExe?: undefined;
|
|
1799
|
+
filter_category?: undefined;
|
|
1800
|
+
filter_level?: undefined;
|
|
1801
|
+
lines?: undefined;
|
|
1802
|
+
log_path?: undefined;
|
|
1803
|
+
include_prefixes?: undefined;
|
|
1804
|
+
exclude_categories?: undefined;
|
|
1736
1805
|
command?: undefined;
|
|
1737
1806
|
presetPath?: undefined;
|
|
1738
1807
|
objectPath?: undefined;
|
|
@@ -1806,6 +1875,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
1806
1875
|
imagePath?: undefined;
|
|
1807
1876
|
imageBase64?: undefined;
|
|
1808
1877
|
pid?: undefined;
|
|
1878
|
+
logPath?: undefined;
|
|
1879
|
+
entries?: undefined;
|
|
1880
|
+
filteredCount?: undefined;
|
|
1809
1881
|
command?: undefined;
|
|
1810
1882
|
result?: undefined;
|
|
1811
1883
|
info?: undefined;
|
|
@@ -1911,6 +1983,36 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
1911
1983
|
type: string;
|
|
1912
1984
|
description: string;
|
|
1913
1985
|
};
|
|
1986
|
+
filter_category: {
|
|
1987
|
+
description: string;
|
|
1988
|
+
};
|
|
1989
|
+
filter_level: {
|
|
1990
|
+
type: string;
|
|
1991
|
+
enum: string[];
|
|
1992
|
+
description: string;
|
|
1993
|
+
};
|
|
1994
|
+
lines: {
|
|
1995
|
+
type: string;
|
|
1996
|
+
description: string;
|
|
1997
|
+
};
|
|
1998
|
+
log_path: {
|
|
1999
|
+
type: string;
|
|
2000
|
+
description: string;
|
|
2001
|
+
};
|
|
2002
|
+
include_prefixes: {
|
|
2003
|
+
type: string;
|
|
2004
|
+
items: {
|
|
2005
|
+
type: string;
|
|
2006
|
+
};
|
|
2007
|
+
description: string;
|
|
2008
|
+
};
|
|
2009
|
+
exclude_categories: {
|
|
2010
|
+
type: string;
|
|
2011
|
+
items: {
|
|
2012
|
+
type: string;
|
|
2013
|
+
};
|
|
2014
|
+
description: string;
|
|
2015
|
+
};
|
|
1914
2016
|
directory?: undefined;
|
|
1915
2017
|
sourcePath?: undefined;
|
|
1916
2018
|
destinationPath?: undefined;
|
|
@@ -2030,6 +2132,35 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2030
2132
|
type: string;
|
|
2031
2133
|
description: string;
|
|
2032
2134
|
};
|
|
2135
|
+
logPath: {
|
|
2136
|
+
type: string;
|
|
2137
|
+
description: string;
|
|
2138
|
+
};
|
|
2139
|
+
entries: {
|
|
2140
|
+
type: string;
|
|
2141
|
+
items: {
|
|
2142
|
+
type: string;
|
|
2143
|
+
properties: {
|
|
2144
|
+
timestamp: {
|
|
2145
|
+
type: string;
|
|
2146
|
+
};
|
|
2147
|
+
category: {
|
|
2148
|
+
type: string;
|
|
2149
|
+
};
|
|
2150
|
+
level: {
|
|
2151
|
+
type: string;
|
|
2152
|
+
};
|
|
2153
|
+
message: {
|
|
2154
|
+
type: string;
|
|
2155
|
+
};
|
|
2156
|
+
};
|
|
2157
|
+
};
|
|
2158
|
+
description: string;
|
|
2159
|
+
};
|
|
2160
|
+
filteredCount: {
|
|
2161
|
+
type: string;
|
|
2162
|
+
description: string;
|
|
2163
|
+
};
|
|
2033
2164
|
assets?: undefined;
|
|
2034
2165
|
paths?: undefined;
|
|
2035
2166
|
materialPath?: undefined;
|
|
@@ -2153,6 +2284,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2153
2284
|
resolution?: undefined;
|
|
2154
2285
|
projectPath?: undefined;
|
|
2155
2286
|
editorExe?: undefined;
|
|
2287
|
+
filter_category?: undefined;
|
|
2288
|
+
filter_level?: undefined;
|
|
2289
|
+
lines?: undefined;
|
|
2290
|
+
log_path?: undefined;
|
|
2291
|
+
include_prefixes?: undefined;
|
|
2292
|
+
exclude_categories?: undefined;
|
|
2156
2293
|
presetPath?: undefined;
|
|
2157
2294
|
objectPath?: undefined;
|
|
2158
2295
|
propertyName?: undefined;
|
|
@@ -2231,6 +2368,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2231
2368
|
imagePath?: undefined;
|
|
2232
2369
|
imageBase64?: undefined;
|
|
2233
2370
|
pid?: undefined;
|
|
2371
|
+
logPath?: undefined;
|
|
2372
|
+
entries?: undefined;
|
|
2373
|
+
filteredCount?: undefined;
|
|
2234
2374
|
presetPath?: undefined;
|
|
2235
2375
|
fields?: undefined;
|
|
2236
2376
|
value?: undefined;
|
|
@@ -2349,6 +2489,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2349
2489
|
resolution?: undefined;
|
|
2350
2490
|
projectPath?: undefined;
|
|
2351
2491
|
editorExe?: undefined;
|
|
2492
|
+
filter_category?: undefined;
|
|
2493
|
+
filter_level?: undefined;
|
|
2494
|
+
lines?: undefined;
|
|
2495
|
+
log_path?: undefined;
|
|
2496
|
+
include_prefixes?: undefined;
|
|
2497
|
+
exclude_categories?: undefined;
|
|
2352
2498
|
command?: undefined;
|
|
2353
2499
|
actorNames?: undefined;
|
|
2354
2500
|
className?: undefined;
|
|
@@ -2422,6 +2568,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2422
2568
|
imagePath?: undefined;
|
|
2423
2569
|
imageBase64?: undefined;
|
|
2424
2570
|
pid?: undefined;
|
|
2571
|
+
logPath?: undefined;
|
|
2572
|
+
entries?: undefined;
|
|
2573
|
+
filteredCount?: undefined;
|
|
2425
2574
|
command?: undefined;
|
|
2426
2575
|
result?: undefined;
|
|
2427
2576
|
info?: undefined;
|
|
@@ -2565,6 +2714,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2565
2714
|
resolution?: undefined;
|
|
2566
2715
|
projectPath?: undefined;
|
|
2567
2716
|
editorExe?: undefined;
|
|
2717
|
+
filter_category?: undefined;
|
|
2718
|
+
filter_level?: undefined;
|
|
2719
|
+
lines?: undefined;
|
|
2720
|
+
log_path?: undefined;
|
|
2721
|
+
include_prefixes?: undefined;
|
|
2722
|
+
exclude_categories?: undefined;
|
|
2568
2723
|
command?: undefined;
|
|
2569
2724
|
presetPath?: undefined;
|
|
2570
2725
|
objectPath?: undefined;
|
|
@@ -2671,6 +2826,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2671
2826
|
imagePath?: undefined;
|
|
2672
2827
|
imageBase64?: undefined;
|
|
2673
2828
|
pid?: undefined;
|
|
2829
|
+
logPath?: undefined;
|
|
2830
|
+
entries?: undefined;
|
|
2831
|
+
filteredCount?: undefined;
|
|
2674
2832
|
command?: undefined;
|
|
2675
2833
|
result?: undefined;
|
|
2676
2834
|
info?: undefined;
|
|
@@ -2767,6 +2925,12 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2767
2925
|
resolution?: undefined;
|
|
2768
2926
|
projectPath?: undefined;
|
|
2769
2927
|
editorExe?: undefined;
|
|
2928
|
+
filter_category?: undefined;
|
|
2929
|
+
filter_level?: undefined;
|
|
2930
|
+
lines?: undefined;
|
|
2931
|
+
log_path?: undefined;
|
|
2932
|
+
include_prefixes?: undefined;
|
|
2933
|
+
exclude_categories?: undefined;
|
|
2770
2934
|
command?: undefined;
|
|
2771
2935
|
presetPath?: undefined;
|
|
2772
2936
|
actorNames?: undefined;
|
|
@@ -2835,6 +2999,9 @@ export declare const consolidatedToolDefinitions: ({
|
|
|
2835
2999
|
imagePath?: undefined;
|
|
2836
3000
|
imageBase64?: undefined;
|
|
2837
3001
|
pid?: undefined;
|
|
3002
|
+
logPath?: undefined;
|
|
3003
|
+
entries?: undefined;
|
|
3004
|
+
filteredCount?: undefined;
|
|
2838
3005
|
command?: undefined;
|
|
2839
3006
|
result?: undefined;
|
|
2840
3007
|
presetPath?: undefined;
|
|
@@ -528,7 +528,7 @@ Supported actions: profile, show_fps, set_quality, play_sound, create_widget, sh
|
|
|
528
528
|
properties: {
|
|
529
529
|
action: {
|
|
530
530
|
type: 'string',
|
|
531
|
-
enum: ['profile', 'show_fps', 'set_quality', 'play_sound', 'create_widget', 'show_widget', 'screenshot', 'engine_start', 'engine_quit'],
|
|
531
|
+
enum: ['profile', 'show_fps', 'set_quality', 'play_sound', 'create_widget', 'show_widget', 'screenshot', 'engine_start', 'engine_quit', 'read_log'],
|
|
532
532
|
description: 'System action'
|
|
533
533
|
},
|
|
534
534
|
// Performance
|
|
@@ -567,7 +567,14 @@ Supported actions: profile, show_fps, set_quality, play_sound, create_widget, sh
|
|
|
567
567
|
resolution: { type: 'string', description: 'Screenshot resolution in WIDTHxHEIGHT format (e.g., "1920x1080", "3840x2160"). Optional for screenshot action, uses viewport size if not specified.' },
|
|
568
568
|
// Engine lifecycle
|
|
569
569
|
projectPath: { type: 'string', description: 'Absolute path to .uproject file (e.g., "C:/Projects/MyGame/MyGame.uproject"). Required for engine_start unless UE_PROJECT_PATH environment variable is set.' },
|
|
570
|
-
editorExe: { type: 'string', description: 'Absolute path to Unreal Editor executable (e.g., "C:/UnrealEngine/Engine/Binaries/Win64/UnrealEditor.exe"). Required for engine_start unless UE_EDITOR_EXE environment variable is set.' }
|
|
570
|
+
editorExe: { type: 'string', description: 'Absolute path to Unreal Editor executable (e.g., "C:/UnrealEngine/Engine/Binaries/Win64/UnrealEditor.exe"). Required for engine_start unless UE_EDITOR_EXE environment variable is set.' },
|
|
571
|
+
// Log reading
|
|
572
|
+
filter_category: { description: 'Category filter as string or array; comma-separated or array values' },
|
|
573
|
+
filter_level: { type: 'string', enum: ['Error', 'Warning', 'Log', 'Verbose', 'VeryVerbose', 'All'], description: 'Log level filter' },
|
|
574
|
+
lines: { type: 'number', description: 'Number of lines to read from tail' },
|
|
575
|
+
log_path: { type: 'string', description: 'Absolute path to a specific .log file to read' },
|
|
576
|
+
include_prefixes: { type: 'array', items: { type: 'string' }, description: 'Only include categories starting with any of these prefixes' },
|
|
577
|
+
exclude_categories: { type: 'array', items: { type: 'string' }, description: 'Categories to exclude' }
|
|
571
578
|
},
|
|
572
579
|
required: ['action']
|
|
573
580
|
},
|
|
@@ -585,7 +592,14 @@ Supported actions: profile, show_fps, set_quality, play_sound, create_widget, sh
|
|
|
585
592
|
imageBase64: { type: 'string', description: 'Screenshot image base64 (truncated)' },
|
|
586
593
|
pid: { type: 'number', description: 'Process ID for launched editor' },
|
|
587
594
|
message: { type: 'string', description: 'Status message' },
|
|
588
|
-
error: { type: 'string', description: 'Error message if failed' }
|
|
595
|
+
error: { type: 'string', description: 'Error message if failed' },
|
|
596
|
+
logPath: { type: 'string', description: 'Log file path used for read_log' },
|
|
597
|
+
entries: {
|
|
598
|
+
type: 'array',
|
|
599
|
+
items: { type: 'object', properties: { timestamp: { type: 'string' }, category: { type: 'string' }, level: { type: 'string' }, message: { type: 'string' } } },
|
|
600
|
+
description: 'Parsed Output Log entries'
|
|
601
|
+
},
|
|
602
|
+
filteredCount: { type: 'number', description: 'Count of entries after filtering' }
|
|
589
603
|
}
|
|
590
604
|
}
|
|
591
605
|
},
|
|
@@ -705,6 +705,23 @@ print('RESULT:' + json.dumps({'success': exists, 'exists': exists, 'path': path}
|
|
|
705
705
|
// 9. SYSTEM CONTROL
|
|
706
706
|
case 'system_control':
|
|
707
707
|
switch (requireAction(args)) {
|
|
708
|
+
case 'read_log': {
|
|
709
|
+
const filterCategoryRaw = args.filter_category;
|
|
710
|
+
const filterCategory = Array.isArray(filterCategoryRaw)
|
|
711
|
+
? filterCategoryRaw
|
|
712
|
+
: typeof filterCategoryRaw === 'string' && filterCategoryRaw.trim() !== ''
|
|
713
|
+
? filterCategoryRaw.split(',').map((s) => s.trim()).filter(Boolean)
|
|
714
|
+
: undefined;
|
|
715
|
+
const res = await tools.logTools.readOutputLog({
|
|
716
|
+
filterCategory,
|
|
717
|
+
filterLevel: args.filter_level,
|
|
718
|
+
lines: typeof args.lines === 'number' ? args.lines : undefined,
|
|
719
|
+
logPath: typeof args.log_path === 'string' ? args.log_path : undefined,
|
|
720
|
+
includePrefixes: Array.isArray(args.include_prefixes) ? args.include_prefixes : undefined,
|
|
721
|
+
excludeCategories: Array.isArray(args.exclude_categories) ? args.exclude_categories : undefined
|
|
722
|
+
});
|
|
723
|
+
return cleanObject(res);
|
|
724
|
+
}
|
|
708
725
|
case 'profile': {
|
|
709
726
|
const res = await tools.performanceTools.startProfiling({ type: args.profileType, duration: args.duration });
|
|
710
727
|
return cleanObject(res);
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { UnrealBridge } from '../unreal-bridge.js';
|
|
2
|
+
type ReadParams = {
|
|
3
|
+
filterCategory?: string[];
|
|
4
|
+
filterLevel?: 'Error' | 'Warning' | 'Log' | 'Verbose' | 'VeryVerbose' | 'All';
|
|
5
|
+
lines?: number;
|
|
6
|
+
logPath?: string;
|
|
7
|
+
includePrefixes?: string[];
|
|
8
|
+
excludeCategories?: string[];
|
|
9
|
+
};
|
|
10
|
+
type Entry = {
|
|
11
|
+
timestamp?: string;
|
|
12
|
+
category?: string;
|
|
13
|
+
level?: string;
|
|
14
|
+
message: string;
|
|
15
|
+
};
|
|
16
|
+
export declare class LogTools {
|
|
17
|
+
private bridge;
|
|
18
|
+
private env;
|
|
19
|
+
private log;
|
|
20
|
+
private cachedLogPath?;
|
|
21
|
+
constructor(bridge: UnrealBridge);
|
|
22
|
+
readOutputLog(params: ReadParams): Promise<{
|
|
23
|
+
success: boolean;
|
|
24
|
+
error: string;
|
|
25
|
+
logPath?: undefined;
|
|
26
|
+
entries?: undefined;
|
|
27
|
+
filteredCount?: undefined;
|
|
28
|
+
} | {
|
|
29
|
+
success: boolean;
|
|
30
|
+
logPath: string;
|
|
31
|
+
entries: Entry[];
|
|
32
|
+
filteredCount: number;
|
|
33
|
+
error?: undefined;
|
|
34
|
+
}>;
|
|
35
|
+
private resolveLogPath;
|
|
36
|
+
private resolveFromProjectEnv;
|
|
37
|
+
private findLatestLogInDir;
|
|
38
|
+
private fileExists;
|
|
39
|
+
private cacheLogPath;
|
|
40
|
+
private tailFile;
|
|
41
|
+
private parseLine;
|
|
42
|
+
private isInternalLogEntry;
|
|
43
|
+
}
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=logs.d.ts.map
|