mcp_toolkit 0.3.0 → 0.4.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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +201 -2
  3. data/README.md +315 -34
  4. data/config/routes.rb +19 -4
  5. data/lib/mcp_toolkit/auth/authority.rb +2 -2
  6. data/lib/mcp_toolkit/authority/composite_tool_provider.rb +32 -0
  7. data/lib/mcp_toolkit/authority/context.rb +45 -0
  8. data/lib/mcp_toolkit/authority/controller_methods.rb +408 -0
  9. data/lib/mcp_toolkit/authority/registry_tool_provider.rb +70 -0
  10. data/lib/mcp_toolkit/authority/token.rb +124 -0
  11. data/lib/mcp_toolkit/authority/tools/base.rb +122 -0
  12. data/lib/mcp_toolkit/authority/tools/get.rb +58 -0
  13. data/lib/mcp_toolkit/authority/tools/list.rb +84 -0
  14. data/lib/mcp_toolkit/authority/tools/resource_schema.rb +44 -0
  15. data/lib/mcp_toolkit/authority/tools/resources.rb +33 -0
  16. data/lib/mcp_toolkit/authority.rb +24 -0
  17. data/lib/mcp_toolkit/configuration.rb +205 -2
  18. data/lib/mcp_toolkit/dispatcher.rb +234 -0
  19. data/lib/mcp_toolkit/engine.rb +22 -7
  20. data/lib/mcp_toolkit/engine_controllers.rb +116 -0
  21. data/lib/mcp_toolkit/gateway/aggregator.rb +122 -0
  22. data/lib/mcp_toolkit/gateway/client.rb +305 -0
  23. data/lib/mcp_toolkit/gateway/proxy.rb +70 -0
  24. data/lib/mcp_toolkit/gateway/unknown_upstream.rb +8 -0
  25. data/lib/mcp_toolkit/gateway/upstream_call_error.rb +23 -0
  26. data/lib/mcp_toolkit/gateway/upstream_registry.rb +79 -0
  27. data/lib/mcp_toolkit/list_executor.rb +17 -0
  28. data/lib/mcp_toolkit/protocol.rb +106 -0
  29. data/lib/mcp_toolkit/rate_limiter.rb +73 -0
  30. data/lib/mcp_toolkit/registry.rb +30 -2
  31. data/lib/mcp_toolkit/resource.rb +125 -7
  32. data/lib/mcp_toolkit/resource_schema.rb +14 -1
  33. data/lib/mcp_toolkit/serializer/base.rb +2 -2
  34. data/lib/mcp_toolkit/session.rb +17 -9
  35. data/lib/mcp_toolkit/tools/authority_base.rb +127 -0
  36. data/lib/mcp_toolkit/transport/controller_methods.rb +2 -2
  37. data/lib/mcp_toolkit/usage_metering/recorder.rb +95 -0
  38. data/lib/mcp_toolkit/version.rb +1 -1
  39. data/lib/mcp_toolkit.rb +16 -3
  40. metadata +38 -2
  41. data/app/controllers/mcp_toolkit/server_controller.rb +0 -19
data/lib/mcp_toolkit.rb CHANGED
@@ -15,9 +15,12 @@ require "zeitwerk"
15
15
  # active_support/concern - Transport::ControllerMethods is an includable concern
16
16
  # active_support/cache - the default MemoryStore cache_store
17
17
  #
18
- # `faraday` is the one exception: it is required alongside its sole owner,
19
- # Auth::AuthorityServerClient, which is the only object that builds an HTTP
20
- # connection.
18
+ # Two third-party libs are the exception to the centralize-here rule: each is
19
+ # required alongside its owner file rather than up front.
20
+ # faraday - the HTTP client, required by the objects that build a connection
21
+ # (Auth::AuthorityServerClient and Gateway::Client).
22
+ # concurrent - concurrent-ruby's futures, required by its sole owner
23
+ # Gateway::Aggregator (which pulls upstreams in parallel).
21
24
  require "json"
22
25
  require "digest"
23
26
  require "time"
@@ -63,8 +66,18 @@ loader.ignore("#{__dir__}/mcp_toolkit/version.rb")
63
66
  # under `app/controllers` (outside this lib-rooted loader), so it needs no ignore;
64
67
  # it is loaded by Rails' autoloader via the engine when mounted.
65
68
  loader.ignore("#{__dir__}/mcp_toolkit/engine.rb")
69
+ # `engine_controllers.rb` reopens `McpToolkit` to add the lazy `parent_controller`
70
+ # builder + `const_missing` (it defines module methods, not a file-named
71
+ # constant), so it is required explicitly below rather than autoloaded.
72
+ loader.ignore("#{__dir__}/mcp_toolkit/engine_controllers.rb")
66
73
  loader.setup
67
74
 
75
+ # The lazy `parent_controller` builder (McpToolkit.build_engine_controllers! /
76
+ # reset_engine_controllers! / const_missing). Required unconditionally (it names no
77
+ # Rails constant at load time); it only builds controllers when one is referenced,
78
+ # which happens only under Rails.
79
+ require_relative "mcp_toolkit/engine_controllers"
80
+
68
81
  # The toolkit for building account-scoped, read-only MCP servers on top of the
69
82
  # official `mcp` gem. See README.md for the satellite + authority quickstarts.
70
83
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mcp_toolkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karol Galanciak
@@ -65,6 +65,20 @@ dependencies:
65
65
  - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: '1.0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: concurrent-ruby
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '1.1'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '1.1'
68
82
  description: |
69
83
  mcp_toolkit extracts the shared MCP-server framework that Smily's apps grew
70
84
  independently: a Streamable-HTTP transport, cache-backed sessions, central-app
@@ -84,23 +98,43 @@ files:
84
98
  - LICENSE.txt
85
99
  - README.md
86
100
  - Rakefile
87
- - app/controllers/mcp_toolkit/server_controller.rb
88
101
  - config/routes.rb
89
102
  - lib/mcp_toolkit.rb
90
103
  - lib/mcp_toolkit/auth/authenticator.rb
91
104
  - lib/mcp_toolkit/auth/authority.rb
92
105
  - lib/mcp_toolkit/auth/authority_server_client.rb
93
106
  - lib/mcp_toolkit/auth/introspection.rb
107
+ - lib/mcp_toolkit/authority.rb
108
+ - lib/mcp_toolkit/authority/composite_tool_provider.rb
109
+ - lib/mcp_toolkit/authority/context.rb
110
+ - lib/mcp_toolkit/authority/controller_methods.rb
111
+ - lib/mcp_toolkit/authority/registry_tool_provider.rb
112
+ - lib/mcp_toolkit/authority/token.rb
113
+ - lib/mcp_toolkit/authority/tools/base.rb
114
+ - lib/mcp_toolkit/authority/tools/get.rb
115
+ - lib/mcp_toolkit/authority/tools/list.rb
116
+ - lib/mcp_toolkit/authority/tools/resource_schema.rb
117
+ - lib/mcp_toolkit/authority/tools/resources.rb
94
118
  - lib/mcp_toolkit/configuration.rb
119
+ - lib/mcp_toolkit/dispatcher.rb
95
120
  - lib/mcp_toolkit/engine.rb
121
+ - lib/mcp_toolkit/engine_controllers.rb
96
122
  - lib/mcp_toolkit/errors/base.rb
97
123
  - lib/mcp_toolkit/errors/configuration_error.rb
98
124
  - lib/mcp_toolkit/errors/invalid_params.rb
99
125
  - lib/mcp_toolkit/errors/unauthorized.rb
100
126
  - lib/mcp_toolkit/field_selection.rb
101
127
  - lib/mcp_toolkit/filtering.rb
128
+ - lib/mcp_toolkit/gateway/aggregator.rb
129
+ - lib/mcp_toolkit/gateway/client.rb
130
+ - lib/mcp_toolkit/gateway/proxy.rb
131
+ - lib/mcp_toolkit/gateway/unknown_upstream.rb
132
+ - lib/mcp_toolkit/gateway/upstream_call_error.rb
133
+ - lib/mcp_toolkit/gateway/upstream_registry.rb
102
134
  - lib/mcp_toolkit/get_executor.rb
103
135
  - lib/mcp_toolkit/list_executor.rb
136
+ - lib/mcp_toolkit/protocol.rb
137
+ - lib/mcp_toolkit/rate_limiter.rb
104
138
  - lib/mcp_toolkit/registry.rb
105
139
  - lib/mcp_toolkit/resource.rb
106
140
  - lib/mcp_toolkit/resource_schema.rb
@@ -110,6 +144,7 @@ files:
110
144
  - lib/mcp_toolkit/session.rb
111
145
  - lib/mcp_toolkit/sql_sanitizer.rb
112
146
  - lib/mcp_toolkit/token_kinds.rb
147
+ - lib/mcp_toolkit/tools/authority_base.rb
113
148
  - lib/mcp_toolkit/tools/base.rb
114
149
  - lib/mcp_toolkit/tools/get.rb
115
150
  - lib/mcp_toolkit/tools/list.rb
@@ -117,6 +152,7 @@ files:
117
152
  - lib/mcp_toolkit/tools/resources.rb
118
153
  - lib/mcp_toolkit/transport/controller_methods.rb
119
154
  - lib/mcp_toolkit/unknown_resource_message.rb
155
+ - lib/mcp_toolkit/usage_metering/recorder.rb
120
156
  - lib/mcp_toolkit/version.rb
121
157
  - sig/mcp_toolkit.rbs
122
158
  homepage: https://github.com/BookingSync/mcp_toolkit
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # The MCP transport controller, provided BY the gem so a satellite mounting
4
- # McpToolkit::Engine writes no controller of its own. It is the standalone
5
- # McpToolkit::Transport::ControllerMethods concern wired into a controller.
6
- #
7
- # Its parent class is configurable (Doorkeeper-style) via
8
- # `McpToolkit.config.parent_controller` (default "ActionController::Base"), so a
9
- # satellite can keep ActionController::Base (NOT ::API) for its logstasher
10
- # `helper_method` hook:
11
- #
12
- # c.parent_controller = "ApplicationController"
13
- #
14
- # Lives under the gem's app/controllers (an engine path), so it's loaded by Rails'
15
- # autoloader via the engine — never by the gem's own Zeitwerk loader, which only
16
- # manages lib/. Non-Rails consumers never see it.
17
- class McpToolkit::ServerController < McpToolkit.config.parent_controller.constantize
18
- include McpToolkit::Transport::ControllerMethods
19
- end