actionmcp 0.51.0 → 0.52.0

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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +83 -0
  3. data/app/controllers/action_mcp/application_controller.rb +12 -6
  4. data/lib/action_mcp/client/session_store.rb +117 -26
  5. data/lib/action_mcp/configuration.rb +16 -1
  6. data/lib/action_mcp/current.rb +19 -0
  7. data/lib/action_mcp/current_helpers.rb +19 -0
  8. data/lib/action_mcp/gateway.rb +85 -0
  9. data/lib/action_mcp/json_rpc_handler_base.rb +6 -1
  10. data/lib/action_mcp/jwt_decoder.rb +26 -0
  11. data/lib/action_mcp/prompt.rb +1 -0
  12. data/lib/action_mcp/resource_template.rb +1 -0
  13. data/lib/action_mcp/server/base_messaging.rb +14 -0
  14. data/lib/action_mcp/server/error_aware.rb +8 -1
  15. data/lib/action_mcp/server/handlers/tool_handler.rb +2 -1
  16. data/lib/action_mcp/server/json_rpc_handler.rb +12 -4
  17. data/lib/action_mcp/server/messaging.rb +12 -1
  18. data/lib/action_mcp/server/registry_management.rb +0 -1
  19. data/lib/action_mcp/server/response_collector.rb +40 -0
  20. data/lib/action_mcp/server/session_store.rb +762 -0
  21. data/lib/action_mcp/server/tools.rb +14 -3
  22. data/lib/action_mcp/server/transport_handler.rb +9 -5
  23. data/lib/action_mcp/server.rb +7 -0
  24. data/lib/action_mcp/tagged_stream_logging.rb +0 -4
  25. data/lib/action_mcp/test_helper/progress_notification_assertions.rb +105 -0
  26. data/lib/action_mcp/test_helper/session_store_assertions.rb +130 -0
  27. data/lib/action_mcp/test_helper.rb +4 -0
  28. data/lib/action_mcp/tool.rb +1 -0
  29. data/lib/action_mcp/version.rb +1 -1
  30. data/lib/action_mcp.rb +0 -1
  31. data/lib/generators/action_mcp/install/install_generator.rb +4 -0
  32. data/lib/generators/action_mcp/install/templates/application_gateway.rb +40 -0
  33. metadata +25 -1
@@ -3,6 +3,11 @@
3
3
  module ActionMCP
4
4
  module Server
5
5
  module Messaging
6
+ # Operation mode for the messaging module
7
+ # :write - writes messages directly (default, for SSE)
8
+ # :return - returns messages without writing (for JSON responses)
9
+ attr_accessor :messaging_mode
10
+
6
11
  def send_jsonrpc_request(method, params: nil, id: SecureRandom.uuid_v7)
7
12
  send_message(:request, method: method, params: params, id: id)
8
13
  end
@@ -44,7 +49,13 @@ module ActionMCP
44
49
  )
45
50
  end
46
51
 
47
- write_message(message)
52
+ if messaging_mode == :return
53
+ write_message(message) # This will be intercepted by ResponseCollector
54
+ message
55
+ else
56
+ write_message(message)
57
+ nil
58
+ end
48
59
  end
49
60
  end
50
61
  end
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # lib/action_mcp/server/registry_management.rb
4
3
  module ActionMCP
5
4
  module Server
6
5
  module RegistryManagement
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionMCP
4
+ module Server
5
+ # Module to collect responses when operating in :return mode
6
+ module ResponseCollector
7
+ attr_reader :collected_responses
8
+
9
+ def initialize_response_collector
10
+ @collected_responses = []
11
+ end
12
+
13
+ # Override write_message to collect responses instead of writing them
14
+ def write_message(message)
15
+ if messaging_mode == :return
16
+ @collected_responses ||= []
17
+ @collected_responses << message
18
+ message
19
+ else
20
+ super
21
+ end
22
+ end
23
+
24
+ # Get all collected responses
25
+ def get_collected_responses
26
+ @collected_responses || []
27
+ end
28
+
29
+ # Get the last response (useful for single request/response scenarios)
30
+ def get_last_response
31
+ @collected_responses&.last
32
+ end
33
+
34
+ # Clear collected responses
35
+ def clear_collected_responses
36
+ @collected_responses = []
37
+ end
38
+ end
39
+ end
40
+ end