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.
- checksums.yaml +4 -4
- data/README.md +83 -0
- data/app/controllers/action_mcp/application_controller.rb +12 -6
- data/lib/action_mcp/client/session_store.rb +117 -26
- data/lib/action_mcp/configuration.rb +16 -1
- data/lib/action_mcp/current.rb +19 -0
- data/lib/action_mcp/current_helpers.rb +19 -0
- data/lib/action_mcp/gateway.rb +85 -0
- data/lib/action_mcp/json_rpc_handler_base.rb +6 -1
- data/lib/action_mcp/jwt_decoder.rb +26 -0
- data/lib/action_mcp/prompt.rb +1 -0
- data/lib/action_mcp/resource_template.rb +1 -0
- data/lib/action_mcp/server/base_messaging.rb +14 -0
- data/lib/action_mcp/server/error_aware.rb +8 -1
- data/lib/action_mcp/server/handlers/tool_handler.rb +2 -1
- data/lib/action_mcp/server/json_rpc_handler.rb +12 -4
- data/lib/action_mcp/server/messaging.rb +12 -1
- data/lib/action_mcp/server/registry_management.rb +0 -1
- data/lib/action_mcp/server/response_collector.rb +40 -0
- data/lib/action_mcp/server/session_store.rb +762 -0
- data/lib/action_mcp/server/tools.rb +14 -3
- data/lib/action_mcp/server/transport_handler.rb +9 -5
- data/lib/action_mcp/server.rb +7 -0
- data/lib/action_mcp/tagged_stream_logging.rb +0 -4
- data/lib/action_mcp/test_helper/progress_notification_assertions.rb +105 -0
- data/lib/action_mcp/test_helper/session_store_assertions.rb +130 -0
- data/lib/action_mcp/test_helper.rb +4 -0
- data/lib/action_mcp/tool.rb +1 -0
- data/lib/action_mcp/version.rb +1 -1
- data/lib/action_mcp.rb +0 -1
- data/lib/generators/action_mcp/install/install_generator.rb +4 -0
- data/lib/generators/action_mcp/install/templates/application_gateway.rb +40 -0
- 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
|
-
|
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
|
@@ -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
|