Class: ClaudeSwarm::ClaudeMcpServer

Inherits:
Object
  • Object
show all
Defined in:
lib/claude_swarm/claude_mcp_server.rb

Class Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(instance_config, calling_instance:, calling_instance_id: nil, debug: false) ⇒ ClaudeMcpServer

Returns a new instance of ClaudeMcpServer.



10
11
12
13
14
15
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
# File 'lib/claude_swarm/claude_mcp_server.rb', line 10

def initialize(instance_config, calling_instance:, calling_instance_id: nil, debug: false)
  @instance_config = instance_config
  @calling_instance = calling_instance
  @calling_instance_id = calling_instance_id

  # Create appropriate executor based on provider
  common_params = {
    working_directory: instance_config[:directory],
    model: instance_config[:model],
    mcp_config: instance_config[:mcp_config_path],
    vibe: instance_config[:vibe],
    instance_name: instance_config[:name],
    instance_id: instance_config[:instance_id],
    calling_instance: calling_instance,
    calling_instance_id: calling_instance_id,
    claude_session_id: instance_config[:claude_session_id],
    additional_directories: instance_config[:directories][1..] || [],
    debug: debug,
  }

  @executor = if instance_config[:provider] == "openai"
    OpenAI::Executor.new(
      **common_params,
      # OpenAI-specific parameters
      temperature: instance_config[:temperature],
      api_version: instance_config[:api_version],
      openai_token_env: instance_config[:openai_token_env],
      base_url: instance_config[:base_url],
      reasoning_effort: instance_config[:reasoning_effort],
      zdr: instance_config[:zdr],
    )
  else
    # Default Claude behavior - always use SDK
    ClaudeCodeExecutor.new(**common_params)
  end

  # Set class variables so tools can access them
  self.class.executor = @executor
  self.class.instance_config = @instance_config
  self.class.logger = @executor.logger
  self.class.session_path = @executor.session_path
  self.class.calling_instance = @calling_instance
  self.class.calling_instance_id = @calling_instance_id
end

Class Attribute Details

.calling_instanceObject

Returns the value of attribute calling_instance.



7
8
9
# File 'lib/claude_swarm/claude_mcp_server.rb', line 7

def calling_instance
  @calling_instance
end

.calling_instance_idObject

Returns the value of attribute calling_instance_id.



7
8
9
# File 'lib/claude_swarm/claude_mcp_server.rb', line 7

def calling_instance_id
  @calling_instance_id
end

.executorObject

Returns the value of attribute executor.



7
8
9
# File 'lib/claude_swarm/claude_mcp_server.rb', line 7

def executor
  @executor
end

.instance_configObject

Returns the value of attribute instance_config.



7
8
9
# File 'lib/claude_swarm/claude_mcp_server.rb', line 7

def instance_config
  @instance_config
end

.loggerObject

Returns the value of attribute logger.



7
8
9
# File 'lib/claude_swarm/claude_mcp_server.rb', line 7

def logger
  @logger
end

.session_pathObject

Returns the value of attribute session_path.



7
8
9
# File 'lib/claude_swarm/claude_mcp_server.rb', line 7

def session_path
  @session_path
end

Instance Method Details

#startObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/claude_swarm/claude_mcp_server.rb', line 55

def start
  server = FastMcp::Server.new(
    name: @instance_config[:name],
    version: "1.0.0",
  )

  # Set dynamic description for TaskTool based on instance config
  thinking_info = " Thinking budget levels: \"think\" < \"think hard\" < \"think harder\" < \"ultrathink\"."
  if @instance_config[:description]
    Tools::TaskTool.description("Execute a task using Agent #{@instance_config[:name]}. #{@instance_config[:description]} #{thinking_info}")
  else
    Tools::TaskTool.description("Execute a task using Agent #{@instance_config[:name]}. #{thinking_info}")
  end

  # Register tool classes (not instances)
  server.register_tool(Tools::TaskTool)
  server.register_tool(Tools::SessionInfoTool)
  server.register_tool(Tools::ResetSessionTool)

  # Start the stdio server
  server.start
end