Module: ActionMCP::Server::Prompts

Included in:
TransportHandler
Defined in:
lib/action_mcp/server/prompts.rb

Instance Method Summary collapse

Instance Method Details

#send_prompts_get(request_id, prompt_name, params) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/action_mcp/server/prompts.rb', line 17

def send_prompts_get(request_id, prompt_name, params)
  # Find prompt in session's registry
  prompt_class = session.registered_prompts.find { |p| p.prompt_name == prompt_name }

  if prompt_class
    # Create prompt and set execution context
    prompt = prompt_class.new(params)
    prompt.with_context({ session: session })

    # Wrap prompt execution with Rails reloader for development
    result = if Rails.env.development? && defined?(Rails.application.reloader)
               Rails.application.reloader.wrap do
                 prompt.call
               end
    else
               prompt.call
    end

    if result.is_error
      send_jsonrpc_response(request_id, error: result)
    else
      send_jsonrpc_response(request_id, result: result)
    end
  else
    send_jsonrpc_error(request_id, :method_not_found, "Prompt '#{prompt_name}' not available in this session")
  end
end

#send_prompts_list(request_id, params = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/action_mcp/server/prompts.rb', line 6

def send_prompts_list(request_id, params = {})
  page, next_cursor = paginate(session.registered_prompts, cursor: params["cursor"])

  result = { prompts: page.map(&:to_h) }
  result[:nextCursor] = next_cursor if next_cursor

  send_jsonrpc_response(request_id, result: result)
rescue Server::CursorError => e
  send_jsonrpc_error(request_id, :invalid_params, e.message)
end