ruby_llm-mcp 0.6.3 → 0.6.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa780ea2ca1b1ba71c5efa1784b14e9473ad351af94f0dc35d94aab4d6057325
4
- data.tar.gz: 1fd76e02e0f6e22087943eff186dbb05cd059e931927442982752cbb9250aa98
3
+ metadata.gz: 5bec47480f606a8d28f8a79032e392e331dcdcef565cd708e6dcc855f0a31445
4
+ data.tar.gz: ac65a564ce2bd4d39e4e4fdcff02da19cbd7573186924e938fadb2d9c2f523db
5
5
  SHA512:
6
- metadata.gz: 5c37a73381c487a02d61bb8365e39b064b37a0d0668bd46eae1bd25ad225982c8f15229867cd4110e89689ec5757e395ce3825795298aabc3f4ed3b8cd49e0e5
7
- data.tar.gz: ecb7f5524d9af14c3386abb3ddae91bee454046449ae2e0bba758c95060157c057222a57ce1b9eae5af197e5ec8187e34474fb3801b7cdabb92fdb3cbe14ddd2
6
+ metadata.gz: 7e9394538e772a3169fe424854cbf57aee643953be4e44f805c82f0f81c61189a06d755e8a14b4e530183e414e9a4b3000912a577d3eca95da236c124b9a54dc
7
+ data.tar.gz: a6eb704e2aaac9386e54cb178dd136bc19510a2159adc63125d50f5a96c9473de9416e33755059f9578ab609d34fe3fbe8c8d7f8e970900380b93770793376a3
@@ -7,6 +7,14 @@ module RubyLLM
7
7
  class Parameter < RubyLLM::Parameter
8
8
  attr_accessor :items, :properties, :enum, :union_type, :default, :title
9
9
 
10
+ class << self
11
+ def all_mcp_parameters?(parameters)
12
+ parameters.is_a?(Hash) &&
13
+ parameters.any? &&
14
+ parameters.values.all? { |p| p.is_a?(RubyLLM::MCP::Parameter) }
15
+ end
16
+ end
17
+
10
18
  def initialize(name, type: "string", title: nil, desc: nil, required: true, default: nil, union_type: nil) # rubocop:disable Metrics/ParameterLists
11
19
  super(name, type: type.to_sym, desc: desc, required: required)
12
20
  @title = title
@@ -9,7 +9,7 @@ module RubyLLM
9
9
 
10
10
  def clean_parameters(parameters)
11
11
  parameters.transform_values do |param|
12
- build_properties(param).compact
12
+ mcp_build_properties(param).compact
13
13
  end
14
14
  end
15
15
 
@@ -17,7 +17,7 @@ module RubyLLM
17
17
  parameters.select { |_, param| param.required }.keys
18
18
  end
19
19
 
20
- def build_properties(param) # rubocop:disable Metrics/MethodLength
20
+ def mcp_build_properties(param) # rubocop:disable Metrics/MethodLength
21
21
  case param.type
22
22
  when :array
23
23
  if param.item_type == :object
@@ -46,7 +46,7 @@ module RubyLLM
46
46
  }.compact
47
47
  when :union
48
48
  {
49
- param.union_type => param.properties.map { |property| build_properties(property) }
49
+ param.union_type => param.properties.map { |property| mcp_build_properties(property) }
50
50
  }
51
51
  else
52
52
  {
@@ -63,11 +63,25 @@ module RubyLLM
63
63
  end
64
64
 
65
65
  module RubyLLM::Providers::Anthropic::Tools
66
- def self.clean_parameters(parameters)
67
- RubyLLM::MCP::Providers::Anthropic::ComplexParameterSupport.clean_parameters(parameters)
66
+ alias original_clean_parameters clean_parameters
67
+ alias original_required_parameters required_parameters
68
+ module_function :original_clean_parameters, :original_required_parameters
69
+
70
+ def clean_parameters(parameters)
71
+ if RubyLLM::MCP::Parameter.all_mcp_parameters?(parameters)
72
+ return RubyLLM::MCP::Providers::Anthropic::ComplexParameterSupport.clean_parameters(parameters)
73
+ end
74
+
75
+ original_clean_parameters(parameters)
68
76
  end
77
+ module_function :clean_parameters
78
+
79
+ def required_parameters(parameters)
80
+ if RubyLLM::MCP::Parameter.all_mcp_parameters?(parameters)
81
+ return RubyLLM::MCP::Providers::Anthropic::ComplexParameterSupport.required_parameters(parameters)
82
+ end
69
83
 
70
- def self.required_parameters(parameters)
71
- RubyLLM::MCP::Providers::Anthropic::ComplexParameterSupport.required_parameters(parameters)
84
+ original_required_parameters(parameters)
72
85
  end
86
+ module_function :required_parameters
73
87
  end
@@ -11,12 +11,12 @@ module RubyLLM
11
11
  def format_parameters(parameters)
12
12
  {
13
13
  type: "OBJECT",
14
- properties: parameters.transform_values { |param| build_properties(param) },
14
+ properties: parameters.transform_values { |param| mcp_build_properties(param) },
15
15
  required: parameters.select { |_, p| p.required }.keys.map(&:to_s)
16
16
  }
17
17
  end
18
18
 
19
- def build_properties(param) # rubocop:disable Metrics/MethodLength
19
+ def mcp_build_properties(param) # rubocop:disable Metrics/MethodLength
20
20
  properties = case param.type
21
21
  when :array
22
22
  if param.item_type == :object
@@ -26,7 +26,7 @@ module RubyLLM
26
26
  description: param.description,
27
27
  items: {
28
28
  type: param_type_for_gemini(param.item_type),
29
- properties: param.properties.transform_values { |value| build_properties(value) }
29
+ properties: param.properties.transform_values { |value| mcp_build_properties(value) }
30
30
  }
31
31
  }.compact
32
32
  else
@@ -43,12 +43,12 @@ module RubyLLM
43
43
  type: param_type_for_gemini(param.type),
44
44
  title: param.title,
45
45
  description: param.description,
46
- properties: param.properties.transform_values { |value| build_properties(value) },
46
+ properties: param.properties.transform_values { |value| mcp_build_properties(value) },
47
47
  required: param.properties.select { |_, p| p.required }.keys
48
48
  }.compact
49
49
  when :union
50
50
  {
51
- param.union_type => param.properties.map { |properties| build_properties(properties) }
51
+ param.union_type => param.properties.map { |properties| mcp_build_properties(properties) }
52
52
  }
53
53
  else
54
54
  {
@@ -60,10 +60,27 @@ module RubyLLM
60
60
 
61
61
  properties.compact
62
62
  end
63
+
64
+ def param_type_for_gemini(type)
65
+ RubyLLM::Providers::Gemini::Tools.param_type_for_gemini(type)
66
+ end
63
67
  end
64
68
  end
65
69
  end
66
70
  end
67
71
  end
68
72
 
69
- RubyLLM::Providers::Gemini.extend(RubyLLM::MCP::Providers::Gemini::ComplexParameterSupport)
73
+ module RubyLLM::Providers::Gemini::Tools
74
+ alias original_format_parameters format_parameters
75
+ module_function :original_format_parameters
76
+ module_function :param_type_for_gemini
77
+
78
+ def format_parameters(parameters)
79
+ if RubyLLM::MCP::Parameter.all_mcp_parameters?(parameters)
80
+ return RubyLLM::MCP::Providers::Gemini::ComplexParameterSupport.format_parameters(parameters)
81
+ end
82
+
83
+ original_format_parameters(parameters)
84
+ end
85
+ module_function :format_parameters
86
+ end
@@ -57,4 +57,16 @@ module RubyLLM
57
57
  end
58
58
  end
59
59
 
60
- RubyLLM::Providers::OpenAI.extend(RubyLLM::MCP::Providers::OpenAI::ComplexParameterSupport)
60
+ module RubyLLM::Providers::OpenAI::Tools
61
+ alias original_param_schema param_schema
62
+ module_function :original_param_schema
63
+
64
+ def param_schema(param)
65
+ if param.is_a?(RubyLLM::MCP::Parameter)
66
+ return RubyLLM::MCP::Providers::OpenAI::ComplexParameterSupport.param_schema(param)
67
+ end
68
+
69
+ original_param_schema(param)
70
+ end
71
+ module_function :param_schema
72
+ end
@@ -496,6 +496,11 @@ module RubyLLM
496
496
  # Server doesn't support SSE - this is acceptable
497
497
  RubyLLM::MCP.logger.info "Server does not support SSE streaming"
498
498
  nil
499
+ when 409
500
+ # Conflict - SSE connection already exists for this session
501
+ # This is expected when reusing sessions and is acceptable
502
+ RubyLLM::MCP.logger.debug "SSE stream already exists for this session"
503
+ nil
499
504
  else
500
505
  reason_phrase = response.respond_to?(:reason_phrase) ? response.reason_phrase : nil
501
506
  raise Errors::TransportError.new(
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RubyLLM
4
4
  module MCP
5
- VERSION = "0.6.3"
5
+ VERSION = "0.6.4"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_llm-mcp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Vice