Class: CompletionKit::McpDispatcher

Inherits:
Object
  • Object
show all
Defined in:
app/services/completion_kit/mcp_dispatcher.rb

Defined Under Namespace

Classes: InvalidParams, MethodNotFound

Constant Summary collapse

PROTOCOL_VERSION =
"2025-03-26"

Class Method Summary collapse

Class Method Details

.call_tool(name, arguments) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/services/completion_kit/mcp_dispatcher.rb', line 40

def self.call_tool(name, arguments)
  case name
  when /\Aprompts_/              then McpTools::Prompts.call(name, arguments)
  when /\Aruns_/                 then McpTools::Runs.call(name, arguments)
  when /\Aresponses_/            then McpTools::Responses.call(name, arguments)
  when /\Adatasets_/             then McpTools::Datasets.call(name, arguments)
  when /\Ametrics_/              then McpTools::Metrics.call(name, arguments)
  when /\Acriteria_/             then McpTools::Criteria.call(name, arguments)
  when /\Aprovider_credentials_/ then McpTools::ProviderCredentials.call(name, arguments)
  else raise MethodNotFound, "Unknown tool: #{name}"
  end
end

.dispatch(method, params) ⇒ Object



19
20
21
22
23
24
25
26
27
28
# File 'app/services/completion_kit/mcp_dispatcher.rb', line 19

def self.dispatch(method, params)
  case method
  when "tools/list"
    {tools: tool_definitions}
  when "tools/call"
    call_tool(params&.dig("name"), params&.dig("arguments") || {})
  else
    raise MethodNotFound, "Method not found: #{method}"
  end
end

.initialize_sessionObject



8
9
10
11
12
13
14
15
16
17
# File 'app/services/completion_kit/mcp_dispatcher.rb', line 8

def self.initialize_session
  session_id = SecureRandom.uuid
  Rails.cache.write("mcp_session:#{session_id}", true, expires_in: 1.hour)
  {
    session_id: session_id,
    protocolVersion: PROTOCOL_VERSION,
    serverInfo: {name: "CompletionKit", version: CompletionKit::VERSION},
    capabilities: {tools: {listChanged: false}}
  }
end

.tool_definitionsObject



30
31
32
33
34
35
36
37
38
# File 'app/services/completion_kit/mcp_dispatcher.rb', line 30

def self.tool_definitions
  McpTools::Prompts.definitions +
    McpTools::Runs.definitions +
    McpTools::Responses.definitions +
    McpTools::Datasets.definitions +
    McpTools::Metrics.definitions +
    McpTools::Criteria.definitions +
    McpTools::ProviderCredentials.definitions
end