stack-service-base 0.0.63 → 0.0.65

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 13692ed5603f5f7f604c33ea62544337e03a91b763edb32608cbcecdc42b492b
4
- data.tar.gz: 977236928246a312407ef70bfe316a605d57672eed48249c92eb36f1d3d32a88
3
+ metadata.gz: 93e5d152f7456e78c982d7d872cb726e864c8c7d8b590e138aadec698b34e144
4
+ data.tar.gz: 658cb94d84c307962c345bb5c7a6a342a90c2f7f8fa31f424e7b3dcf56041aad
5
5
  SHA512:
6
- metadata.gz: d0966902c26ccda5d2573f37449ebc6c3e1a284d3585c0627a62009da90961828bc9ca8f90fe675e76a2af098d42b45efdca9b07cb713979870427d2bd8ab789
7
- data.tar.gz: 519b03a4803d7af6c3360d29cfc6b39bc33fb219984be86c60244263f57eeaddca4822fc6b921962a5b4faa18f659258e020cfe02ee75a14139e10d0f82cf274
6
+ metadata.gz: 5d9c4d21e2628fe4122e52ff8f8f1525f558139c2398d0f2b1279aa51175357323e3aea8ec1e1319ef07496cd1d2d3555c6182286ba4f44ec8f2ee360d191377
7
+ data.tar.gz: eb1cec3620d180ba68569ba9a3a5faa68c6aa42ca9b0dfe971793f419532adaf38acece7cb3f6000c187c55af3535b3659a269477ae29313e66fa0b7b7364697
@@ -11,10 +11,26 @@ SERVICES = {
11
11
  }
12
12
  }
13
13
 
14
- require 'stack-service-base/mcp_processor'
15
- require 'stack-service-base/mcp_tool_registry'
14
+ require 'stack-service-base/mcp_helper'
15
+ helpers McpHelper
16
16
 
17
- MCP_PROCESSOR = McpProcessor.new
17
+ Tool :search do
18
+ description 'Search for a term in the database'
19
+ input query: { type: "string", description: "Term to search for", required: true }
20
+ execute do |inputs|
21
+ query = inputs[:query]
22
+ { results: [{id:"doc-1",title:"...",url:"..."}] }
23
+ end
24
+ end
25
+
26
+ Tool :fetch do
27
+ description 'Fetch a resource from the database'
28
+ input resource_id: { type: "string", description: "Resource ID to fetch", required: true }
29
+ execute do |inputs|
30
+ id = inputs[:id]
31
+ { id: "doc-1", title: "...", text: "full text...", url: "https://example.com/doc", metadata: { source: "vector_store" } }
32
+ end
33
+ end
18
34
 
19
35
  Tool :service_status do
20
36
  description 'Check current status of a service'
@@ -24,12 +40,10 @@ Tool :service_status do
24
40
  service = SERVICES[service_name]
25
41
  rpc_error!(404, "Unknown service #{service_name}") unless service
26
42
  {
27
- toolResult: {
28
- service_name: service_name,
29
- status: service[:status],
30
- uptime_sec: service[:uptime],
31
- last_restart: service[:last_restart].utc.iso8601,
32
- }
43
+ service_name: service_name,
44
+ status: service[:status],
45
+ uptime_sec: service[:uptime],
46
+ last_restart: service[:last_restart].utc.iso8601,
33
47
  }
34
48
  end
35
49
  end
@@ -46,28 +60,13 @@ Tool :restart_service do
46
60
  service[:status] = "running"
47
61
  service[:last_restart] = Time.now
48
62
  service[:uptime] = 0
49
-
50
63
  {
51
- toolResult: {
52
- service_name: service_name,
53
- status: service[:status],
54
- restarted_at: service[:last_restart].utc.iso8601,
55
- force: inputs.fetch(:force, false)
56
- }
64
+ service_name: service_name,
65
+ status: service[:status],
66
+ restarted_at: service[:last_restart].utc.iso8601,
67
+ force: inputs.fetch(:force, false)
57
68
  }
58
69
  end
59
70
  end
60
71
 
61
- before { content_type :json }
62
- error McpProcessor::ParseError do |err|
63
- status err.status
64
- err.body
65
- end
66
-
67
- get '/', &MCP_PROCESSOR.method(:root_endpoint)
68
- post '/' do
69
- request.body.rewind
70
- MCP_PROCESSOR.rpc_endpoint(request.body.read)
71
- end
72
-
73
72
  run Sinatra::Application
@@ -0,0 +1,47 @@
1
+ require_relative 'mcp_processor'
2
+ require_relative 'mcp_tool_registry'
3
+
4
+ MCP_PROCESSOR = McpProcessor.new
5
+
6
+ module McpHelper
7
+ def self.included(base)
8
+ base.class_eval do
9
+
10
+ error McpProcessor::ParseError do |err|
11
+ status err.status
12
+ err.body
13
+ end
14
+
15
+ get '/mcp' do
16
+ content_type :json
17
+ MCP_PROCESSOR.root_endpoint
18
+ end
19
+
20
+ post '/mcp' do
21
+ content_type 'text/event-stream'
22
+ headers['Cache-Control'] = 'no-cache'
23
+ headers['X-Accel-Buffering'] = 'no'
24
+ headers['mcp-session-id'] = SecureRandom.uuid
25
+ request.body&.rewind
26
+ body = request.body.read.to_s
27
+
28
+ response_body =
29
+ begin
30
+ MCP_PROCESSOR.rpc_endpoint(body)
31
+ rescue McpProcessor::ParseError => e
32
+ status e.status
33
+ e.body
34
+ end
35
+
36
+ LOGGER.debug "request body: #{body}"
37
+ LOGGER.debug "response body: #{response_body}"
38
+
39
+ stream true do |s|
40
+ s.callback { LOGGER.debug "stream closed: #{s}" }
41
+ s << "event: message\ndata: #{response_body}\n\n"
42
+ s.close
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,3 +1,3 @@
1
1
  module StackServiceBase
2
- VERSION = '0.0.63'
2
+ VERSION = '0.0.65'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stack-service-base
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.63
4
+ version: 0.0.65
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom B
@@ -401,6 +401,7 @@ files:
401
401
  - lib/stack-service-base/examples/mcp_config.ru
402
402
  - lib/stack-service-base/fiber_pool.rb
403
403
  - lib/stack-service-base/logging.rb
404
+ - lib/stack-service-base/mcp_helper.rb
404
405
  - lib/stack-service-base/mcp_processor.rb
405
406
  - lib/stack-service-base/mcp_tool_registry.rb
406
407
  - lib/stack-service-base/nats_patch_1.rb