actionmcp 0.14.0 → 0.17.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 (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +174 -144
  3. data/Rakefile +1 -1
  4. data/app/controllers/action_mcp/{application_controller.rb → mcp_controller.rb} +3 -1
  5. data/app/controllers/action_mcp/messages_controller.rb +7 -5
  6. data/app/controllers/action_mcp/sse_controller.rb +19 -13
  7. data/app/models/action_mcp/session/message.rb +95 -90
  8. data/app/models/action_mcp/session/resource.rb +10 -6
  9. data/app/models/action_mcp/session/subscription.rb +9 -5
  10. data/app/models/action_mcp/session.rb +22 -13
  11. data/app/models/action_mcp.rb +2 -0
  12. data/config/routes.rb +2 -0
  13. data/db/migrate/20250308122801_create_action_mcp_sessions.rb +12 -10
  14. data/db/migrate/20250314230152_add_is_ping_to_session_message.rb +2 -0
  15. data/db/migrate/20250316005021_create_action_mcp_session_subscriptions.rb +3 -1
  16. data/db/migrate/20250316005649_create_action_mcp_session_resources.rb +4 -2
  17. data/exe/actionmcp_cli +57 -55
  18. data/lib/action_mcp/base_json_rpc_handler.rb +97 -0
  19. data/lib/action_mcp/callbacks.rb +122 -0
  20. data/lib/action_mcp/capability.rb +6 -3
  21. data/lib/action_mcp/client.rb +20 -26
  22. data/lib/action_mcp/client_json_rpc_handler.rb +69 -0
  23. data/lib/action_mcp/configuration.rb +8 -8
  24. data/lib/action_mcp/content/resource.rb +1 -1
  25. data/lib/action_mcp/gem_version.rb +2 -0
  26. data/lib/action_mcp/instrumentation/controller_runtime.rb +37 -0
  27. data/lib/action_mcp/instrumentation/instrumentation.rb +26 -0
  28. data/lib/action_mcp/instrumentation/resource_instrumentation.rb +40 -0
  29. data/lib/action_mcp/json_rpc/response.rb +18 -2
  30. data/lib/action_mcp/json_rpc_handler.rb +93 -21
  31. data/lib/action_mcp/log_subscriber.rb +29 -0
  32. data/lib/action_mcp/logging.rb +1 -3
  33. data/lib/action_mcp/prompt.rb +15 -6
  34. data/lib/action_mcp/prompt_response.rb +1 -1
  35. data/lib/action_mcp/prompts_registry.rb +1 -0
  36. data/lib/action_mcp/registry_base.rb +1 -0
  37. data/lib/action_mcp/resource_callbacks.rb +156 -0
  38. data/lib/action_mcp/resource_template.rb +25 -19
  39. data/lib/action_mcp/resource_templates_registry.rb +19 -25
  40. data/lib/action_mcp/sampling_request.rb +113 -0
  41. data/lib/action_mcp/server.rb +4 -1
  42. data/lib/action_mcp/server_json_rpc_handler.rb +90 -0
  43. data/lib/action_mcp/test_helper.rb +6 -2
  44. data/lib/action_mcp/tool.rb +12 -3
  45. data/lib/action_mcp/tool_response.rb +3 -2
  46. data/lib/action_mcp/transport/capabilities.rb +5 -1
  47. data/lib/action_mcp/transport/messaging.rb +2 -0
  48. data/lib/action_mcp/transport/prompts.rb +2 -0
  49. data/lib/action_mcp/transport/resources.rb +23 -6
  50. data/lib/action_mcp/transport/roots.rb +11 -0
  51. data/lib/action_mcp/transport/sampling.rb +14 -0
  52. data/lib/action_mcp/transport/sse_client.rb +11 -15
  53. data/lib/action_mcp/transport/stdio_client.rb +12 -14
  54. data/lib/action_mcp/transport/tools.rb +2 -0
  55. data/lib/action_mcp/transport/transport_base.rb +16 -15
  56. data/lib/action_mcp/transport.rb +2 -0
  57. data/lib/action_mcp/transport_handler.rb +3 -0
  58. data/lib/action_mcp/version.rb +1 -1
  59. data/lib/action_mcp.rb +8 -2
  60. data/lib/generators/action_mcp/install/install_generator.rb +4 -1
  61. data/lib/generators/action_mcp/install/templates/application_mcp_res_template.rb +2 -0
  62. data/lib/generators/action_mcp/resource_template/resource_template_generator.rb +2 -0
  63. data/lib/generators/action_mcp/resource_template/templates/resource_template.rb.erb +1 -1
  64. data/lib/tasks/action_mcp_tasks.rake +11 -6
  65. metadata +26 -14
data/lib/action_mcp.rb CHANGED
@@ -9,6 +9,7 @@ require "active_record/railtie"
9
9
  require "action_controller/railtie"
10
10
  require "action_cable/engine"
11
11
  require "action_mcp/configuration"
12
+ require "action_mcp/log_subscriber"
12
13
  require "action_mcp/engine"
13
14
  require "zeitwerk"
14
15
 
@@ -29,11 +30,12 @@ end.setup
29
30
 
30
31
  module ActionMCP
31
32
  require_relative "action_mcp/version"
32
- require_relative "action_mcp/configuration"
33
- PROTOCOL_VERSION = "2024-11-05"
33
+ include Logging
34
+ PROTOCOL_VERSION = "2024-11-05"
34
35
 
35
36
  class << self
36
37
  attr_accessor :server
38
+
37
39
  # Returns the configuration instance.
38
40
  #
39
41
  # @return [Configuration] the configuration instance
@@ -83,3 +85,7 @@ module ActionMCP
83
85
  ActiveModel::Type.register(:string_array, StringArray)
84
86
  ActiveModel::Type.register(:integer_array, IntegerArray)
85
87
  end
88
+
89
+ ActiveSupport.on_load(:action_mcp) do
90
+ self.logger = ::Rails.logger
91
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rails/generators"
2
4
 
3
5
  module ActionMcp
@@ -14,7 +16,8 @@ module ActionMcp
14
16
  end
15
17
 
16
18
  def create_mcp_resource_template_file
17
- template "application_mcp_res_template.rb", File.join("app/mcp/resource_templates", "application_mcp_res_template.rb")
19
+ template "application_mcp_res_template.rb",
20
+ File.join("app/mcp/resource_templates", "application_mcp_res_template.rb")
18
21
  end
19
22
  end
20
23
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ApplicationMCPResTemplate < ActionMCP::ResourceTemplate
2
4
  abstract!
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rails/generators"
2
4
 
3
5
  module ActionMcp
@@ -8,7 +8,7 @@ class <%= class_name %> < ApplicationMCPResTemplate
8
8
  description: "Product identifier",
9
9
  required: true
10
10
 
11
- def fetch
11
+ def resolve
12
12
  # Fetch the product from the database or api or whatever
13
13
  # Ruby Magic here
14
14
  if (product = Product.find_by(id: product_id))
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :action_mcp do
2
4
  # bin/rails action_mcp:list_tools
3
5
  desc "List all tools with their names and descriptions"
@@ -9,7 +11,8 @@ namespace :action_mcp do
9
11
  puts "\e[34m---------------\e[0m" # Blue
10
12
  ActionMCP::Tool.descendants.each do |tool|
11
13
  next if tool.abstract?
12
- puts "\e[34m#{tool.capability_name}:\e[0m #{tool.description}" # Blue name
14
+
15
+ puts "\e[34m#{tool.capability_name}:\e[0m #{tool.description}" # Blue name
13
16
  end
14
17
  puts "\n"
15
18
  end
@@ -24,7 +27,8 @@ namespace :action_mcp do
24
27
  puts "\e[32m-----------------\e[0m" # Red
25
28
  ActionMCP::Prompt.descendants.each do |prompt|
26
29
  next if prompt.abstract?
27
- puts "\e[32m#{prompt.capability_name}:\e[0m #{prompt.description}" # Red name
30
+
31
+ puts "\e[32m#{prompt.capability_name}:\e[0m #{prompt.description}" # Red name
28
32
  end
29
33
  puts "\n"
30
34
  end
@@ -35,17 +39,18 @@ namespace :action_mcp do
35
39
  # Ensure Rails eager loads all classes
36
40
  Rails.application.eager_load!
37
41
 
38
- puts "\e[33mACTION MCP RESOURCES\e[0m" # Yellow
39
- puts "\e[33m--------------------\e[0m" # Yellow
42
+ puts "\e[33mACTION MCP RESOURCES\e[0m" # Yellow
43
+ puts "\e[33m--------------------\e[0m" # Yellow
40
44
  ActionMCP::ResourceTemplate.descendants.each do |resource|
41
45
  next if resource.abstract?
42
- puts "\e[33m#{resource.capability_name}:\e[0m #{resource.description}" # Yellow name
46
+
47
+ puts "\e[33m#{resource.capability_name}:\e[0m #{resource.description}" # Yellow name
43
48
  end
44
49
  puts "\n"
45
50
  end
46
51
 
47
52
  desc "List all tools and prompts with their names and descriptions"
48
- task list: [ :list_tools, :list_prompts, :list_resources ] do
53
+ task list: %i[list_tools list_prompts list_resources] do
49
54
  # This task lists all tools, prompts, and resources
50
55
  end
51
56
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actionmcp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Abdelkader Boudih
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-16 00:00:00.000000000 Z
10
+ date: 2025-03-21 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
- name: railties
13
+ name: actioncable
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
@@ -38,19 +38,19 @@ dependencies:
38
38
  - !ruby/object:Gem::Version
39
39
  version: 8.0.1
40
40
  - !ruby/object:Gem::Dependency
41
- name: actioncable
41
+ name: faraday
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ">="
44
+ - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 8.0.1
46
+ version: '2.0'
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">="
51
+ - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 8.0.1
53
+ version: '2.0'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: multi_json
56
56
  requirement: !ruby/object:Gem::Requirement
@@ -66,19 +66,19 @@ dependencies:
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  - !ruby/object:Gem::Dependency
69
- name: faraday
69
+ name: railties
70
70
  requirement: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: '2.0'
74
+ version: 8.0.1
75
75
  type: :runtime
76
76
  prerelease: false
77
77
  version_requirements: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '2.0'
81
+ version: 8.0.1
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: zeitwerk
84
84
  requirement: !ruby/object:Gem::Requirement
@@ -105,7 +105,7 @@ files:
105
105
  - MIT-LICENSE
106
106
  - README.md
107
107
  - Rakefile
108
- - app/controllers/action_mcp/application_controller.rb
108
+ - app/controllers/action_mcp/mcp_controller.rb
109
109
  - app/controllers/action_mcp/messages_controller.rb
110
110
  - app/controllers/action_mcp/sse_controller.rb
111
111
  - app/models/action_mcp.rb
@@ -121,8 +121,11 @@ files:
121
121
  - db/migrate/20250316005649_create_action_mcp_session_resources.rb
122
122
  - exe/actionmcp_cli
123
123
  - lib/action_mcp.rb
124
+ - lib/action_mcp/base_json_rpc_handler.rb
125
+ - lib/action_mcp/callbacks.rb
124
126
  - lib/action_mcp/capability.rb
125
127
  - lib/action_mcp/client.rb
128
+ - lib/action_mcp/client_json_rpc_handler.rb
126
129
  - lib/action_mcp/configuration.rb
127
130
  - lib/action_mcp/content.rb
128
131
  - lib/action_mcp/content/audio.rb
@@ -131,6 +134,9 @@ files:
131
134
  - lib/action_mcp/content/text.rb
132
135
  - lib/action_mcp/engine.rb
133
136
  - lib/action_mcp/gem_version.rb
137
+ - lib/action_mcp/instrumentation/controller_runtime.rb
138
+ - lib/action_mcp/instrumentation/instrumentation.rb
139
+ - lib/action_mcp/instrumentation/resource_instrumentation.rb
134
140
  - lib/action_mcp/integer_array.rb
135
141
  - lib/action_mcp/json_rpc.rb
136
142
  - lib/action_mcp/json_rpc/json_rpc_error.rb
@@ -138,6 +144,7 @@ files:
138
144
  - lib/action_mcp/json_rpc/request.rb
139
145
  - lib/action_mcp/json_rpc/response.rb
140
146
  - lib/action_mcp/json_rpc_handler.rb
147
+ - lib/action_mcp/log_subscriber.rb
141
148
  - lib/action_mcp/logging.rb
142
149
  - lib/action_mcp/prompt.rb
143
150
  - lib/action_mcp/prompt_response.rb
@@ -145,9 +152,12 @@ files:
145
152
  - lib/action_mcp/registry_base.rb
146
153
  - lib/action_mcp/renderable.rb
147
154
  - lib/action_mcp/resource.rb
155
+ - lib/action_mcp/resource_callbacks.rb
148
156
  - lib/action_mcp/resource_template.rb
149
157
  - lib/action_mcp/resource_templates_registry.rb
158
+ - lib/action_mcp/sampling_request.rb
150
159
  - lib/action_mcp/server.rb
160
+ - lib/action_mcp/server_json_rpc_handler.rb
151
161
  - lib/action_mcp/string_array.rb
152
162
  - lib/action_mcp/test_helper.rb
153
163
  - lib/action_mcp/tool.rb
@@ -159,6 +169,8 @@ files:
159
169
  - lib/action_mcp/transport/notifications.rb
160
170
  - lib/action_mcp/transport/prompts.rb
161
171
  - lib/action_mcp/transport/resources.rb
172
+ - lib/action_mcp/transport/roots.rb
173
+ - lib/action_mcp/transport/sampling.rb
162
174
  - lib/action_mcp/transport/sse_client.rb
163
175
  - lib/action_mcp/transport/stdio_client.rb
164
176
  - lib/action_mcp/transport/tools.rb