Class: ThingsMcp::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/things_mcp/server.rb

Overview

MCP server implementation for Things 3 integration

This class creates and runs an MCP server that provides tools for interacting with Things 3. It sets up tool definitions, handles tool calls, and manages the stdio transport.

Instance Method Summary collapse

Constructor Details

#initializeServer

Returns a new instance of Server.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/things_mcp/server.rb', line 17

def initialize
  # Check Ruby version first
  check_ruby_version

  @logger = Logger.new($stderr)
  @logger.level = Logger::INFO

  # Create all tool classes
  create_tool_classes

  @server = MCP::Server.new(
    name: "things",
    version: "0.1.0",
    tools: @tool_classes,
  )
rescue => e
  $stderr.puts "ERROR during initialization: #{e.class}: #{e.message}"
  $stderr.puts "Backtrace:"
  e.backtrace.each { |line| $stderr.puts "  #{line}" }
  $stderr.flush
  raise
end

Instance Method Details

#runObject



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/things_mcp/server.rb', line 40

def run
  @logger.info("Starting Things MCP server...")

  # Check if Things app is available
  unless ThingsMcp::Database.things_app_available?
    @logger.warn("Things app is not running. Will attempt to launch when needed.")
  end

  # Run the server using stdio
  transport = MCP::Transports::StdioTransport.new(@server)
  transport.open
rescue => e
  # Output to stderr so Claude can see the error
  $stderr.puts "ERROR: #{e.class}: #{e.message}"
  $stderr.puts "Backtrace:"
  e.backtrace.each { |line| $stderr.puts "  #{line}" }
  $stderr.flush
  raise
end