Class: Mcp::Tools::CustomService
- Inherits:
-
BaseService
- Object
- BaseService
- Mcp::Tools::CustomService
- Extended by:
- Gitlab::Utils::Override
- Defined in:
- app/services/mcp/tools/custom_service.rb
Direct Known Subclasses
Constant Summary
Constants included from Mcp::Tools::Concerns::Versionable
Mcp::Tools::Concerns::Versionable::VERSION_FORMAT
Instance Method Summary collapse
- #auth_ability ⇒ Object
- #auth_target(_params) ⇒ Object
- #authorize!(params) ⇒ Object
- #execute(request: nil, params: nil) ⇒ Object
-
#initialize(name:, version: nil) ⇒ CustomService
constructor
A new instance of CustomService.
- #set_cred(current_user: nil, access_token: nil) ⇒ Object
Methods included from Gitlab::Utils::Override
extended, extensions, included, method_added, override, prepended, queue_verification, verify!
Methods included from Mcp::Tools::Concerns::Versionable
#description, #graphql_operation, #initialize_version, #input_schema, #operation_name, #version
Methods inherited from BaseService
#available?, #description, #input_schema, #to_h, tool_aliases
Constructor Details
#initialize(name:, version: nil) ⇒ CustomService
Returns a new instance of CustomService.
11 12 13 14 |
# File 'app/services/mcp/tools/custom_service.rb', line 11 def initialize(name:, version: nil) super(name: name) initialize_version(version) end |
Instance Method Details
#auth_ability ⇒ Object
43 44 45 |
# File 'app/services/mcp/tools/custom_service.rb', line 43 def auth_ability raise NoMethodError, "#{self.class.name}#auth_ability should be implemented in a subclass" end |
#auth_target(_params) ⇒ Object
47 48 49 |
# File 'app/services/mcp/tools/custom_service.rb', line 47 def auth_target(_params) raise NoMethodError, "#{self.class.name}#auth_target should be implemented in a subclass" end |
#authorize!(params) ⇒ Object
32 33 34 35 36 37 38 39 40 41 |
# File 'app/services/mcp/tools/custom_service.rb', line 32 def (params) target = auth_target(params) raise ArgumentError, "#{name}: target object not found, the params received: #{params.inspect}" if target.nil? allowed = ::Ability.allowed?(current_user, auth_ability, target) return if allowed raise Gitlab::Access::AccessDeniedError, "CustomService: User #{current_user.id} does " \ "not have permission to #{auth_ability} for target #{target.id}" end |
#execute(request: nil, params: nil) ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'app/services/mcp/tools/custom_service.rb', line 22 def execute(request: nil, params: nil) return Response.error("#{self.class.name}: current_user is not set") unless current_user.present? (params) super rescue StandardError => e Response.error("Tool execution failed: #{e.message}") end |
#set_cred(current_user: nil, access_token: nil) ⇒ Object
17 18 19 20 |
# File 'app/services/mcp/tools/custom_service.rb', line 17 def set_cred(current_user: nil, access_token: nil) @current_user = current_user _ = access_token # access_token is not used in CustomService end |