Module: HTM::MCP::Server
- Defined in:
- lib/htm/mcp/server.rb
Overview
MCP Server setup and lifecycle management
Class Method Summary collapse
- .check_database_config! ⇒ Object
- .configure_htm! ⇒ Object
- .configure_logging! ⇒ Object
- .create_server ⇒ Object
- .register_resources(server) ⇒ Object
- .register_tools(server) ⇒ Object
- .start ⇒ Object
- .verify_database_connection! ⇒ Object
Class Method Details
.check_database_config! ⇒ Object
30 31 32 33 34 35 36 |
# File 'lib/htm/mcp/server.rb', line 30 def check_database_config! return if ENV['HTM_DATABASE__URL'] || ENV['HTM_DATABASE__NAME'] warn "Error: Database not configured." warn "Set HTM_DATABASE__URL or HTM_DATABASE__NAME environment variable." warn "Run 'htm_mcp help' for details." exit 1 end |
.configure_htm! ⇒ Object
70 71 72 73 74 75 76 |
# File 'lib/htm/mcp/server.rb', line 70 def configure_htm! HTM.configure do |config| # Job backend now comes from config (defaults to :fiber) # Use HTM_JOB__BACKEND=inline or config file to override config.logger = @silent_logger # Silent logging for MCP end end |
.configure_logging! ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/htm/mcp/server.rb', line 49 def configure_logging! # IMPORTANT: MCP uses STDIO for JSON-RPC communication. # ALL logging must go to STDERR to avoid corrupting the protocol. @stderr_logger = Logger.new($stderr) @stderr_logger.level = Logger::INFO @stderr_logger.formatter = proc do |severity, datetime, _progname, msg| "[MCP #{severity}] #{datetime.strftime('%H:%M:%S')} #{msg}\n" end # Silent logger for RubyLLM/HTM internals (prevents STDOUT corruption) @silent_logger = Logger.new(IO::NULL) # Configure RubyLLM to not log to STDOUT (corrupts MCP protocol) RubyLLM.configure do |config| config.logger = @silent_logger end # Set logger for MCP session Session.logger = @stderr_logger end |
.create_server ⇒ Object
78 79 80 81 82 83 |
# File 'lib/htm/mcp/server.rb', line 78 def create_server FastMcp::Server.new( name: 'htm-memory-server', version: HTM::VERSION ) end |
.register_resources(server) ⇒ Object
93 94 95 |
# File 'lib/htm/mcp/server.rb', line 93 def register_resources(server) RESOURCES.each { |resource| server.register_resource(resource) } end |
.register_tools(server) ⇒ Object
85 86 87 88 89 90 91 |
# File 'lib/htm/mcp/server.rb', line 85 def register_tools(server) # Register individual robot/memory tools TOOLS.each { |tool| server.register_tool(tool) } # Register group tools GROUP_TOOLS.each { |tool| server.register_tool(tool) } end |
.start ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/htm/mcp/server.rb', line 17 def start check_database_config! verify_database_connection! configure_logging! configure_htm! server = create_server register_tools(server) register_resources(server) server.start end |
.verify_database_connection! ⇒ Object
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/htm/mcp/server.rb', line 38 def verify_database_connection! HTM::SequelConfig.establish_connection! # Quick connectivity test HTM.db.execute("SELECT 1") rescue => e warn "Error: Cannot connect to database." warn e. CLI.print_error_suggestion(e.) exit 1 end |