16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/headless_browser_tool/stdio_server.rb', line 16
def self.start(options = {})
DirectorySetup.setup_directories(include_logs: true)
HeadlessBrowserTool::Logger.initialize_logger(mode: :stdio)
session_id = ENV.fetch("HBT_SESSION_ID", nil)
server = FastMcp::Server.new(
name: "headless-browser-tool",
version: HeadlessBrowserTool::VERSION
)
browser = Browser.new(headless: options.fetch(:headless, true))
Server.browser_instance = browser
Server.single_session_mode = true
if session_id
HeadlessBrowserTool::Logger.log.info "Session ID provided: #{session_id}"
SessionPersistence.restore_session(session_id, browser.session)
end
HeadlessBrowserTool::Tools::ALL_TOOLS.each do |tool_class|
server.register_tool(tool_class)
end
HeadlessBrowserTool::Logger.log.info "Starting HeadlessBrowserTool MCP server in stdio mode..."
HeadlessBrowserTool::Logger.log.info "Headless: #{options.fetch(:headless, true)}"
@browser = browser
@session_id = session_id
at_exit do
SessionPersistence.save_session(@session_id, @browser.session) if @session_id
end
server.start
rescue Interrupt
HeadlessBrowserTool::Logger.log.info "Shutting down..."
SessionPersistence.save_session(session_id, browser.session) if session_id
ensure
SessionPersistence.save_session(session_id, browser.session) if session_id
end
|