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 CHANGED
@@ -19,7 +19,7 @@ LOG_LEVEL=info
19
19
 
20
20
  # Server Settings
21
21
  SERVER_NAME=unreal-engine-mcp
22
- SERVER_VERSION=0.4.5
22
+ SERVER_VERSION=0.4.7
23
23
 
24
24
  # Connection Settings
25
25
  MAX_RETRY_ATTEMPTS=3
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
  [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-TypeScript-blue)](https://github.com/modelcontextprotocol/sdk)
6
6
  [![Unreal Engine](https://img.shields.io/badge/Unreal%20Engine-5.0--5.6-orange)](https://www.unrealengine.com/)
7
7
  [![MCP Registry](https://img.shields.io/badge/MCP%20Registry-Published-green)](https://registry.modelcontextprotocol.io/)
8
- [![smithery badge](https://smithery.ai/badge/@ChiR24/unreal_mcp_server)](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.5',
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
- // Ensure connection only when needed, with 3 attempts
434
- const connected = await ensureConnectedOnDemand();
435
- if (!connected) {
436
- trackPerformance(startTime, false);
437
- return createNotConnectedResponse(name);
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