ferrum-mcp 1.0.0

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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.env.example +90 -0
  3. data/CHANGELOG.md +229 -0
  4. data/CONTRIBUTING.md +469 -0
  5. data/LICENSE +21 -0
  6. data/README.md +334 -0
  7. data/SECURITY.md +286 -0
  8. data/bin/ferrum-mcp +66 -0
  9. data/bin/lint +10 -0
  10. data/bin/serve +3 -0
  11. data/bin/test +4 -0
  12. data/docs/API_REFERENCE.md +1410 -0
  13. data/docs/CONFIGURATION.md +254 -0
  14. data/docs/DEPLOYMENT.md +846 -0
  15. data/docs/DOCKER.md +836 -0
  16. data/docs/DOCKER_BOTBROWSER.md +455 -0
  17. data/docs/GETTING_STARTED.md +249 -0
  18. data/docs/TROUBLESHOOTING.md +677 -0
  19. data/lib/ferrum_mcp/browser_manager.rb +101 -0
  20. data/lib/ferrum_mcp/cli/command_handler.rb +99 -0
  21. data/lib/ferrum_mcp/cli/server_runner.rb +166 -0
  22. data/lib/ferrum_mcp/configuration.rb +229 -0
  23. data/lib/ferrum_mcp/resource_manager.rb +223 -0
  24. data/lib/ferrum_mcp/server.rb +254 -0
  25. data/lib/ferrum_mcp/session.rb +227 -0
  26. data/lib/ferrum_mcp/session_manager.rb +183 -0
  27. data/lib/ferrum_mcp/tools/accept_cookies_tool.rb +458 -0
  28. data/lib/ferrum_mcp/tools/base_tool.rb +114 -0
  29. data/lib/ferrum_mcp/tools/clear_cookies_tool.rb +66 -0
  30. data/lib/ferrum_mcp/tools/click_tool.rb +218 -0
  31. data/lib/ferrum_mcp/tools/close_session_tool.rb +49 -0
  32. data/lib/ferrum_mcp/tools/create_session_tool.rb +146 -0
  33. data/lib/ferrum_mcp/tools/drag_and_drop_tool.rb +171 -0
  34. data/lib/ferrum_mcp/tools/evaluate_js_tool.rb +46 -0
  35. data/lib/ferrum_mcp/tools/execute_script_tool.rb +48 -0
  36. data/lib/ferrum_mcp/tools/fill_form_tool.rb +78 -0
  37. data/lib/ferrum_mcp/tools/find_by_text_tool.rb +153 -0
  38. data/lib/ferrum_mcp/tools/get_attribute_tool.rb +56 -0
  39. data/lib/ferrum_mcp/tools/get_cookies_tool.rb +70 -0
  40. data/lib/ferrum_mcp/tools/get_html_tool.rb +52 -0
  41. data/lib/ferrum_mcp/tools/get_session_info_tool.rb +40 -0
  42. data/lib/ferrum_mcp/tools/get_text_tool.rb +67 -0
  43. data/lib/ferrum_mcp/tools/get_title_tool.rb +42 -0
  44. data/lib/ferrum_mcp/tools/get_url_tool.rb +39 -0
  45. data/lib/ferrum_mcp/tools/go_back_tool.rb +49 -0
  46. data/lib/ferrum_mcp/tools/go_forward_tool.rb +49 -0
  47. data/lib/ferrum_mcp/tools/hover_tool.rb +76 -0
  48. data/lib/ferrum_mcp/tools/list_sessions_tool.rb +33 -0
  49. data/lib/ferrum_mcp/tools/navigate_tool.rb +59 -0
  50. data/lib/ferrum_mcp/tools/press_key_tool.rb +91 -0
  51. data/lib/ferrum_mcp/tools/query_shadow_dom_tool.rb +225 -0
  52. data/lib/ferrum_mcp/tools/refresh_tool.rb +49 -0
  53. data/lib/ferrum_mcp/tools/screenshot_tool.rb +121 -0
  54. data/lib/ferrum_mcp/tools/session_tool.rb +37 -0
  55. data/lib/ferrum_mcp/tools/set_cookie_tool.rb +77 -0
  56. data/lib/ferrum_mcp/tools/solve_captcha_tool.rb +528 -0
  57. data/lib/ferrum_mcp/transport/http_server.rb +93 -0
  58. data/lib/ferrum_mcp/transport/rate_limiter.rb +79 -0
  59. data/lib/ferrum_mcp/transport/stdio_server.rb +63 -0
  60. data/lib/ferrum_mcp/version.rb +5 -0
  61. data/lib/ferrum_mcp/whisper_service.rb +222 -0
  62. data/lib/ferrum_mcp.rb +35 -0
  63. metadata +248 -0
@@ -0,0 +1,677 @@
1
+ # Troubleshooting Guide
2
+
3
+ This guide helps you diagnose and fix common issues with FerrumMCP.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Server Won't Start](#server-wont-start)
8
+ - [Browser Issues](#browser-issues)
9
+ - [Session Management](#session-management)
10
+ - [Tool Errors](#tool-errors)
11
+ - [Claude Desktop Integration](#claude-desktop-integration)
12
+ - [Docker Issues](#docker-issues)
13
+ - [BotBrowser Integration](#botbrowser-integration)
14
+ - [Performance Issues](#performance-issues)
15
+ - [Logging and Debugging](#logging-and-debugging)
16
+
17
+ ---
18
+
19
+ ## Server Won't Start
20
+
21
+ ### Error: `cannot load such file -- ferrum`
22
+
23
+ **Cause**: Dependencies not installed
24
+
25
+ **Solution**:
26
+ ```bash
27
+ bundle install
28
+ ```
29
+
30
+ ### Error: `Address already in use - bind(2) for "0.0.0.0" port 3000`
31
+
32
+ **Cause**: Port 3000 is already in use
33
+
34
+ **Solution**:
35
+ ```bash
36
+ # Find process using port 3000
37
+ lsof -i :3000
38
+
39
+ # Kill the process
40
+ kill -9 <PID>
41
+
42
+ # Or use a different port
43
+ MCP_SERVER_PORT=3001 ruby bin/ferrum-mcp
44
+ ```
45
+
46
+ ### Error: `Zeitwerk::NameError: expected file ... to define constant ...`
47
+
48
+ **Cause**: File naming doesn't match class name
49
+
50
+ **Solution**:
51
+ ```bash
52
+ # Check Zeitwerk eager loading
53
+ bundle exec rake zeitwerk:check
54
+ ```
55
+
56
+ Fix any naming mismatches reported.
57
+
58
+ ### Error: `Browser path not found: /path/to/chrome`
59
+
60
+ **Cause**: Chrome/Chromium not installed or wrong path
61
+
62
+ **Solution**:
63
+
64
+ **macOS**:
65
+ ```bash
66
+ # Chrome
67
+ BROWSER_CHROME=chrome:/Applications/Google Chrome.app/Contents/MacOS/Google Chrome:Chrome:Default
68
+
69
+ # Or use system default
70
+ BROWSER_CHROME=chrome::Chrome:Default
71
+ ```
72
+
73
+ **Linux**:
74
+ ```bash
75
+ # Find Chrome
76
+ which google-chrome
77
+ which chromium-browser
78
+
79
+ # Set path
80
+ BROWSER_CHROME=chrome:/usr/bin/google-chrome:Chrome:Default
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Browser Issues
86
+
87
+ ### Error: `Ferrum::DeadBrowserError: Browser is dead`
88
+
89
+ **Cause**: Browser crashed or was killed
90
+
91
+ **Solution**:
92
+ 1. Close the affected session: `close_session(session_id: "...")`
93
+ 2. Create a new session
94
+ 3. Check logs for crash reason: `logs/ferrum_mcp.log`
95
+
96
+ **Common causes**:
97
+ - Out of memory
98
+ - Browser timeout exceeded
99
+ - Incompatible Chrome version
100
+
101
+ ### Error: `Ferrum::TimeoutError: Timed out waiting for response`
102
+
103
+ **Cause**: Browser operation took too long
104
+
105
+ **Solution**:
106
+ ```bash
107
+ # Increase timeout
108
+ BROWSER_TIMEOUT=120 ruby bin/ferrum-mcp
109
+ ```
110
+
111
+ Or when creating session:
112
+ ```ruby
113
+ create_session(timeout: 120)
114
+ ```
115
+
116
+ ### Error: `Chrome failed to start: exited abnormally`
117
+
118
+ **Cause**: Chrome can't run (usually in Docker/CI)
119
+
120
+ **Solution**:
121
+
122
+ **Docker**:
123
+ ```bash
124
+ # Run with required security options
125
+ docker run --shm-size=2g \
126
+ --security-opt seccomp=unconfined \
127
+ -p 3000:3000 \
128
+ eth3rnit3/ferrum-mcp
129
+ ```
130
+
131
+ **Headless mode**:
132
+ ```bash
133
+ BROWSER_HEADLESS=true ruby bin/ferrum-mcp
134
+ ```
135
+
136
+ ### Browser window appears but doesn't load pages
137
+
138
+ **Cause**: Network connectivity or DNS issues
139
+
140
+ **Solution**:
141
+ ```ruby
142
+ # Test with simple page
143
+ navigate(url: "https://example.com", session_id: "...")
144
+
145
+ # Check logs
146
+ tail -f logs/ferrum_mcp.log
147
+ ```
148
+
149
+ **Check**:
150
+ - Internet connectivity
151
+ - Proxy settings
152
+ - Firewall rules
153
+
154
+ ---
155
+
156
+ ## Session Management
157
+
158
+ ### Error: `SessionError: Session not found`
159
+
160
+ **Cause**: Session doesn't exist or was closed
161
+
162
+ **Solution**:
163
+ ```ruby
164
+ # List active sessions
165
+ list_sessions()
166
+
167
+ # Create new session
168
+ session_id = create_session()
169
+ ```
170
+
171
+ ### Sessions not auto-closing
172
+
173
+ **Cause**: Sessions are being actively used (no idle time)
174
+
175
+ **Behavior**: Sessions only close after 30 minutes of **inactivity**
176
+
177
+ **Solution**: Close sessions manually when done:
178
+ ```ruby
179
+ close_session(session_id: "...")
180
+ ```
181
+
182
+ ### Too many sessions consuming resources
183
+
184
+ **Current behavior**: No hard limit on concurrent sessions
185
+
186
+ **Solution**:
187
+ ```ruby
188
+ # List all sessions
189
+ sessions = list_sessions()
190
+
191
+ # Close inactive sessions
192
+ sessions.each do |session|
193
+ close_session(session_id: session['session_id'])
194
+ end
195
+ ```
196
+
197
+ **Note**: Session limits (`MAX_CONCURRENT_SESSIONS`) planned for v1.1
198
+
199
+ ---
200
+
201
+ ## Tool Errors
202
+
203
+ ### Error: `ToolError: Element not found`
204
+
205
+ **Cause**: Element doesn't exist or CSS/XPath selector is wrong
206
+
207
+ **Solution**:
208
+ ```ruby
209
+ # Debug: Get page HTML
210
+ html = get_html(session_id: "...")
211
+
212
+ # Try different selectors
213
+ # CSS: .class-name, #id, button[type="submit"]
214
+ # XPath: //button[@type="submit"]
215
+
216
+ # Wait for element to appear (if page is loading)
217
+ # Note: wait_for_element is currently disabled
218
+ # Use navigate with wait for idle instead
219
+ navigate(url: "...", wait_until: "networkidle", session_id: "...")
220
+ ```
221
+
222
+ ### Error: `ToolError: Stale element reference`
223
+
224
+ **Cause**: Element changed after being found (page modified)
225
+
226
+ **Solution**: Tools automatically retry 3 times. If still failing:
227
+ ```ruby
228
+ # Refresh page and try again
229
+ refresh(session_id: "...")
230
+ click(selector: "...", session_id: "...")
231
+ ```
232
+
233
+ ### Screenshot returns blank/black image
234
+
235
+ **Cause**: Page not fully loaded or rendering issue
236
+
237
+ **Solution**:
238
+ ```ruby
239
+ # Wait for page to load - navigation already waits for load event
240
+ navigate(url: "...", session_id: "...")
241
+ # Take screenshot
242
+ screenshot(session_id: "...")
243
+ ```
244
+
245
+ ### Fill form doesn't work
246
+
247
+ **Cause**: Form field not found or not interactable
248
+
249
+ **Solution**:
250
+ ```ruby
251
+ # 1. Verify field exists
252
+ get_html(session_id: "...")
253
+
254
+ # 2. Click field first to focus
255
+ click(selector: "input[name='username']", session_id: "...")
256
+
257
+ # 3. Fill form
258
+ fill_form(
259
+ fields: { "input[name='username']": "myusername" },
260
+ session_id: "..."
261
+ )
262
+ ```
263
+
264
+ ### JavaScript execution fails
265
+
266
+ **Cause**: Syntax error or browser context issue
267
+
268
+ **Solution**:
269
+ ```ruby
270
+ # For return value, use evaluate_js
271
+ result = evaluate_js(
272
+ script: "document.title",
273
+ session_id: "..."
274
+ )
275
+
276
+ # For side effects, use execute_script
277
+ execute_script(
278
+ script: "document.querySelector('#btn').click()",
279
+ session_id: "..."
280
+ )
281
+
282
+ # Debug errors
283
+ execute_script(
284
+ script: "console.log('Debug output')",
285
+ session_id: "..."
286
+ )
287
+ # Check browser console logs
288
+ ```
289
+
290
+ ---
291
+
292
+ ## Claude Desktop Integration
293
+
294
+ ### Claude Desktop doesn't show FerrumMCP
295
+
296
+ **Cause**: Configuration error or server not starting
297
+
298
+ **Solution**:
299
+
300
+ 1. **Check config file location**:
301
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
302
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
303
+ - Linux: `~/.config/Claude/claude_desktop_config.json`
304
+
305
+ 2. **Verify JSON syntax**:
306
+ ```bash
307
+ # macOS
308
+ cat ~/Library/Application\ Support/Claude/claude_desktop_config.json | jq .
309
+ ```
310
+
311
+ 3. **Check paths are absolute**:
312
+ ```json
313
+ {
314
+ "mcpServers": {
315
+ "ferrum-mcp": {
316
+ "command": "/Users/username/.rbenv/versions/3.3.5/bin/ruby",
317
+ "args": [
318
+ "/Users/username/code/ferrum-mcp/bin/ferrum-mcp",
319
+ "--transport",
320
+ "stdio"
321
+ ]
322
+ }
323
+ }
324
+ }
325
+ ```
326
+
327
+ 4. **Restart Claude Desktop** completely (quit and reopen)
328
+
329
+ 5. **Check logs**:
330
+ ```bash
331
+ tail -f ~/code/ferrum-mcp/logs/ferrum_mcp.log
332
+ ```
333
+
334
+ ### Error: `command not found: ruby`
335
+
336
+ **Cause**: Ruby path is wrong or not absolute
337
+
338
+ **Solution**:
339
+ ```bash
340
+ # Find Ruby path
341
+ which ruby
342
+ # Example: /Users/username/.rbenv/versions/3.3.5/bin/ruby
343
+
344
+ # Use absolute path in config
345
+ ```
346
+
347
+ ### Claude says "Tool not available"
348
+
349
+ **Cause**: Server not running or communication issue
350
+
351
+ **Solution**:
352
+ 1. Test server manually:
353
+ ```bash
354
+ ruby bin/ferrum-mcp --transport stdio
355
+ # Type: {"method": "list_tools"}
356
+ # Press Enter
357
+ ```
358
+
359
+ 2. Check for error output
360
+ 3. Verify Ruby version: `ruby --version` (need 3.2+)
361
+
362
+ ---
363
+
364
+ ## Docker Issues
365
+
366
+ ### Error: `docker: no matching manifest for linux/arm64`
367
+
368
+ **Cause**: Image not built for ARM architecture (M1/M2 Macs)
369
+
370
+ **Current status**: Multi-platform builds enabled (amd64, arm64)
371
+
372
+ **Solution**:
373
+ ```bash
374
+ # Pull latest image
375
+ docker pull eth3rnit3/ferrum-mcp:latest
376
+
377
+ # Or build locally
378
+ docker build --platform linux/arm64 -t ferrum-mcp .
379
+ ```
380
+
381
+ ### Container starts but server not accessible
382
+
383
+ **Cause**: Port mapping or firewall issue
384
+
385
+ **Solution**:
386
+ ```bash
387
+ # Check container is running
388
+ docker ps
389
+
390
+ # Check port mapping
391
+ docker port <container_id>
392
+
393
+ # Correct mapping
394
+ docker run -p 3000:3000 eth3rnit3/ferrum-mcp
395
+ ```
396
+
397
+ ### Chrome crashes in Docker
398
+
399
+ **Cause**: Insufficient shared memory
400
+
401
+ **Solution**:
402
+ ```bash
403
+ docker run --shm-size=2g \
404
+ -p 3000:3000 \
405
+ eth3rnit3/ferrum-mcp
406
+ ```
407
+
408
+ ### Permission denied errors in Docker
409
+
410
+ **Cause**: Container running as root
411
+
412
+ **Solution** (workaround until v1.1):
413
+ ```bash
414
+ docker run --user 1000:1000 \
415
+ -p 3000:3000 \
416
+ eth3rnit3/ferrum-mcp
417
+ ```
418
+
419
+ ---
420
+
421
+ ## BotBrowser Integration
422
+
423
+ See [BOTBROWSER_INTEGRATION.md](BOTBROWSER_INTEGRATION.md) for detailed troubleshooting.
424
+
425
+ ### Error: `BotBrowser path not found`
426
+
427
+ **Solution**:
428
+ ```bash
429
+ # Verify BotBrowser installed
430
+ ls /opt/botbrowser/chrome
431
+
432
+ # Set path
433
+ BROWSER_BOTBROWSER=botbrowser:/opt/botbrowser/chrome:BotBrowser:Anti-detection
434
+ ```
435
+
436
+ ### Error: Popup "You are currently using a demo profile" or "Session with given id not found" after navigation
437
+
438
+ **Symptoms**:
439
+ - BotBrowser shows a popup about demo/invalid profile on startup
440
+ - "Session with given id not found" error after navigation
441
+ - CDP session loss between tool calls
442
+ - Tools work individually but fail when chained
443
+
444
+ **Cause**: Invalid, expired, or demo BotBrowser profile
445
+
446
+ **How BotBrowser profiles work**:
447
+ - BotBrowser uses encrypted `.enc` profile files for anti-detection fingerprints
448
+ - Each profile contains browser fingerprint data (user agent, canvas, WebGL, etc.)
449
+ - **Demo profiles**: Limited functionality, unstable CDP, cause session loss
450
+ - **Trial/Premium profiles**: Full functionality, stable CDP session
451
+
452
+ Demo or invalid profiles cause unstable Chrome DevTools Protocol (CDP) behavior, making it impossible to execute multiple operations in sequence.
453
+
454
+ **Solution**: Use valid trial or premium BotBrowser profiles
455
+
456
+ **Configuration**:
457
+
458
+ ```bash
459
+ # In .env file
460
+ BOT_PROFILE_ID=/path/to/valid/profile.enc:Profile Name:Description
461
+
462
+ # For Docker, mount profile directory
463
+ -v /path/to/profiles:/profiles:ro
464
+ -e "BOT_PROFILE_ID=/profiles/your_profile.enc:Name:Description"
465
+ ```
466
+
467
+ **How to verify profile is working**:
468
+ ```ruby
469
+ # Create session with BotBrowser profile
470
+ create_session(browser_id: "botbrowser", bot_profile_id: "your_profile_id")
471
+
472
+ # Test sequence of operations (this fails with invalid profiles)
473
+ navigate(url: "https://example.com", session_id: "...")
474
+ get_text(selector: "h1", session_id: "...") # ← Fails here if profile is invalid
475
+ ```
476
+
477
+ **If successful**:
478
+ - ✓ No popup appears on browser startup
479
+ - ✓ Navigation completes
480
+ - ✓ Subsequent operations work (get_text, screenshot, etc.)
481
+ - ✓ Session persists across multiple tool calls
482
+
483
+ **Getting BotBrowser profiles**:
484
+ - Trial profiles: Included with BotBrowser download packages
485
+ - Premium profiles: Contact BotBrowser support (botbrowser@bk.ru or @botbrowser_support on Telegram)
486
+ - Profile version must match BotBrowser version
487
+
488
+ ### Error: `Failed to load profile`
489
+
490
+ **Cause**: Invalid or encrypted profile
491
+
492
+ **Solution**:
493
+ ```bash
494
+ # Verify profile exists
495
+ ls /path/to/profile.enc
496
+
497
+ # Set profile
498
+ BOT_PROFILE_US=/path/to/profile.enc:US Chrome:US fingerprint
499
+
500
+ # Check profile is encrypted (.enc extension)
501
+ ```
502
+
503
+ ### BotBrowser session slower than regular Chrome
504
+
505
+ **Expected behavior**: Anti-detection adds overhead
506
+
507
+ **Mitigation**:
508
+ - Use regular Chrome for non-protected sites
509
+ - Increase timeout for BotBrowser sessions
510
+ - Use separate session for BotBrowser
511
+
512
+ ---
513
+
514
+ ## Performance Issues
515
+
516
+ ### High memory usage
517
+
518
+ **Cause**: Multiple sessions or memory leak
519
+
520
+ **Solution**:
521
+ ```bash
522
+ # Monitor sessions
523
+ list_sessions()
524
+
525
+ # Close unused sessions
526
+ close_session(session_id: "...")
527
+
528
+ # Enable headless mode
529
+ BROWSER_HEADLESS=true ruby bin/ferrum-mcp
530
+
531
+ # Limit concurrent sessions (manual until v1.1)
532
+ ```
533
+
534
+ ### Slow tool execution
535
+
536
+ **Cause**: Network latency, page load time, or timeouts
537
+
538
+ **Solution**:
539
+ ```ruby
540
+ # Increase timeout
541
+ create_session(timeout: 120)
542
+
543
+ # Use headless mode (faster)
544
+ create_session(headless: true)
545
+
546
+ # Navigate with faster wait condition
547
+ navigate(url: "...", wait_until: "domcontentloaded", session_id: "...")
548
+ ```
549
+
550
+ ### CPU usage spikes
551
+
552
+ **Cause**: Multiple browsers or heavy page rendering
553
+
554
+ **Solution**:
555
+ - Limit concurrent sessions
556
+ - Use headless mode
557
+ - Close sessions when done
558
+ - Monitor: `htop` or Activity Monitor
559
+
560
+ ---
561
+
562
+ ## Logging and Debugging
563
+
564
+ ### Enable debug logging
565
+
566
+ ```bash
567
+ LOG_LEVEL=debug ruby bin/ferrum-mcp
568
+ ```
569
+
570
+ ### Check logs
571
+
572
+ ```bash
573
+ # View logs
574
+ tail -f logs/ferrum_mcp.log
575
+
576
+ # Search for errors
577
+ grep ERROR logs/ferrum_mcp.log
578
+
579
+ # Search for specific session
580
+ grep "session-123" logs/ferrum_mcp.log
581
+ ```
582
+
583
+ ### Log levels
584
+
585
+ - `DEBUG`: Detailed execution traces
586
+ - `INFO`: Session lifecycle, tool execution (default)
587
+ - `WARN`: Degraded functionality
588
+ - `ERROR`: Failures requiring attention
589
+
590
+ ### Common log errors
591
+
592
+ **`ERROR -- : Browser startup failed`**
593
+ → Check browser path and installation
594
+
595
+ **`ERROR -- : Session not found`**
596
+ → Session expired or invalid session_id
597
+
598
+ **`WARN -- : Session idle timeout reached`**
599
+ → Normal, session auto-closed after 30 minutes
600
+
601
+ **`ERROR -- : Stale element reference`**
602
+ → Tool automatically retries, usually recovers
603
+
604
+ ### Enable RSpec verbose output
605
+
606
+ ```bash
607
+ bundle exec rspec --format documentation
608
+ ```
609
+
610
+ ### Test specific scenario
611
+
612
+ ```bash
613
+ # Create test script
614
+ cat > test_scenario.rb << 'EOF'
615
+ require_relative 'lib/ferrum_mcp'
616
+
617
+ config = FerrumMCP::Configuration.new
618
+ server = FerrumMCP::Server.new(config)
619
+
620
+ # Your test code here
621
+ session_id = server.execute_tool('create_session', { headless: false })
622
+ puts "Session created: #{session_id}"
623
+ EOF
624
+
625
+ ruby test_scenario.rb
626
+ ```
627
+
628
+ ---
629
+
630
+ ## Getting Help
631
+
632
+ If you're still stuck:
633
+
634
+ 1. **Check documentation**:
635
+ - [Getting Started](GETTING_STARTED.md)
636
+ - [API Reference](API_REFERENCE.md)
637
+ - [Configuration](CONFIGURATION.md)
638
+
639
+ 2. **Search existing issues**:
640
+ - [GitHub Issues](https://github.com/Eth3rnit3/FerrumMCP/issues)
641
+
642
+ 3. **Enable debug logging**:
643
+ ```bash
644
+ LOG_LEVEL=debug ruby bin/ferrum-mcp
645
+ ```
646
+
647
+ 4. **Create a minimal reproduction**:
648
+ - Simplest possible steps to reproduce
649
+ - Include error messages
650
+ - Share logs (redact sensitive info)
651
+
652
+ 5. **Open an issue**:
653
+ - Use bug report template
654
+ - Include environment details
655
+ - Attach logs and screenshots
656
+
657
+ 6. **Contact**:
658
+ - Email: [eth3rnit3@gmail.com](mailto:eth3rnit3@gmail.com)
659
+
660
+ ---
661
+
662
+ ## Quick Diagnostic Checklist
663
+
664
+ Before opening an issue, verify:
665
+
666
+ - [ ] Ruby version ≥ 3.2: `ruby --version`
667
+ - [ ] Dependencies installed: `bundle install`
668
+ - [ ] Chrome installed: `which google-chrome` or `which chromium-browser`
669
+ - [ ] Port available: `lsof -i :3000`
670
+ - [ ] Logs checked: `tail -f logs/ferrum_mcp.log`
671
+ - [ ] Configuration valid: Check `.env` file
672
+ - [ ] RuboCop passes: `bundle exec rubocop`
673
+ - [ ] Tests pass: `bundle exec rspec`
674
+
675
+ ---
676
+
677
+ **Last Updated**: 2025-01-23