Module: ActionMCP

Defined in:
app/models/action_mcp/session.rb,
lib/action_mcp.rb,
lib/action_mcp/tool.rb,
app/models/action_mcp.rb,
lib/action_mcp/client.rb,
lib/action_mcp/engine.rb,
lib/action_mcp/prompt.rb,
lib/action_mcp/server.rb,
lib/action_mcp/content.rb,
lib/action_mcp/current.rb,
lib/action_mcp/gateway.rb,
lib/action_mcp/logging.rb,
lib/action_mcp/version.rb,
lib/action_mcp/resource.rb,
lib/action_mcp/callbacks.rb,
lib/action_mcp/transport.rb,
lib/action_mcp/capability.rb,
lib/action_mcp/renderable.rb,
lib/action_mcp/client/base.rb,
lib/action_mcp/gem_version.rb,
lib/action_mcp/test_helper.rb,
lib/action_mcp/client/roots.rb,
lib/action_mcp/client/tools.rb,
lib/action_mcp/content/base.rb,
lib/action_mcp/content/text.rb,
lib/action_mcp/server/roots.rb,
lib/action_mcp/server/tasks.rb,
lib/action_mcp/server/tools.rb,
lib/action_mcp/string_array.rb,
lib/action_mcp/base_response.rb,
lib/action_mcp/client/server.rb,
lib/action_mcp/configuration.rb,
lib/action_mcp/content/audio.rb,
lib/action_mcp/content/image.rb,
lib/action_mcp/integer_array.rb,
lib/action_mcp/logging/level.rb,
lib/action_mcp/logging/mixin.rb,
lib/action_mcp/logging/state.rb,
lib/action_mcp/registry_base.rb,
lib/action_mcp/tool_response.rb,
lib/action_mcp/client/catalog.rb,
lib/action_mcp/client/logging.rb,
lib/action_mcp/client/prompts.rb,
lib/action_mcp/client/toolbox.rb,
lib/action_mcp/log_subscriber.rb,
lib/action_mcp/logging/logger.rb,
lib/action_mcp/schema_helpers.rb,
lib/action_mcp/server/prompts.rb,
lib/action_mcp/tools_registry.rb,
lib/action_mcp/current_helpers.rb,
lib/action_mcp/filtered_logger.rb,
lib/action_mcp/prompt_response.rb,
lib/action_mcp/server/sampling.rb,
lib/action_mcp/client/blueprint.rb,
lib/action_mcp/client/messaging.rb,
lib/action_mcp/client/resources.rb,
lib/action_mcp/client/transport.rb,
lib/action_mcp/console_detector.rb,
lib/action_mcp/content/resource.rb,
lib/action_mcp/prompts_registry.rb,
lib/action_mcp/server/resources.rb,
lib/action_mcp/client/collection.rb,
lib/action_mcp/resource_response.rb,
lib/action_mcp/resource_template.rb,
lib/action_mcp/client/elicitation.rb,
lib/action_mcp/client/prompt_book.rb,
lib/action_mcp/gateway_identifier.rb,
lib/action_mcp/resource_callbacks.rb,
lib/action_mcp/server/elicitation.rb,
lib/action_mcp/server/error_aware.rb,
app/models/action_mcp/session/task.rb,
lib/action_mcp/gateway_identifiers.rb,
lib/action_mcp/logging/null_logger.rb,
lib/action_mcp/server/base_session.rb,
lib/action_mcp/server/capabilities.rb,
lib/action_mcp/client/session_store.rb,
lib/action_mcp/server/configuration.rb,
lib/action_mcp/server/session_store.rb,
lib/action_mcp/content/resource_link.rb,
lib/action_mcp/json_rpc_handler_base.rb,
lib/action_mcp/output_schema_builder.rb,
lib/action_mcp/server/base_messaging.rb,
lib/action_mcp/server/error_handling.rb,
lib/action_mcp/server/simple_pub_sub.rb,
lib/action_mcp/tagged_stream_logging.rb,
lib/action_mcp/uri_ambiguity_checker.rb,
app/models/action_mcp/session/message.rb,
lib/action_mcp/server/handlers/router.rb,
lib/action_mcp/types/float_array_type.rb,
app/jobs/action_mcp/tool_execution_job.rb,
app/models/action_mcp/session/resource.rb,
lib/action_mcp/client/json_rpc_handler.rb,
lib/action_mcp/client/request_timeouts.rb,
lib/action_mcp/server/json_rpc_handler.rb,
lib/action_mcp/server/sampling_request.rb,
lib/action_mcp/client/streamable_client.rb,
lib/action_mcp/server/messaging_service.rb,
lib/action_mcp/server/solid_mcp_adapter.rb,
lib/action_mcp/server/transport_handler.rb,
app/models/action_mcp/application_record.rb,
lib/action_mcp/client/test_session_store.rb,
lib/action_mcp/server/base_session_store.rb,
lib/action_mcp/server/response_collector.rb,
lib/action_mcp/server/test_session_store.rb,
lib/action_mcp/server/registry_management.rb,
app/models/action_mcp/session/subscription.rb,
lib/action_mcp/resource_templates_registry.rb,
lib/action_mcp/client/session_store_factory.rb,
lib/action_mcp/server/handlers/task_handler.rb,
lib/action_mcp/server/handlers/tool_handler.rb,
lib/action_mcp/server/session_store_factory.rb,
lib/action_mcp/client/volatile_session_store.rb,
lib/action_mcp/server/volatile_session_store.rb,
lib/action_mcp/server/handlers/prompt_handler.rb,
lib/generators/action_mcp/tool/tool_generator.rb,
lib/action_mcp/instrumentation/instrumentation.rb,
lib/action_mcp/server/handlers/logging_handler.rb,
lib/action_mcp/client/streamable_http_transport.rb,
lib/action_mcp/server/handlers/resource_handler.rb,
app/controllers/action_mcp/application_controller.rb,
lib/action_mcp/client/active_record_session_store.rb,
lib/action_mcp/instrumentation/controller_runtime.rb,
lib/action_mcp/server/active_record_session_store.rb,
lib/generators/action_mcp/prompt/prompt_generator.rb,
app/models/concerns/action_mcp/mcp_console_helpers.rb,
app/models/concerns/action_mcp/mcp_message_inspect.rb,
lib/action_mcp/test_helper/session_store_assertions.rb,
lib/generators/action_mcp/install/install_generator.rb,
lib/action_mcp/gateway_identifiers/devise_identifier.rb,
lib/action_mcp/gateway_identifiers/warden_identifier.rb,
lib/action_mcp/gateway_identifiers/api_key_identifier.rb,
lib/action_mcp/instrumentation/resource_instrumentation.rb,
lib/action_mcp/gateway_identifiers/request_env_identifier.rb,
lib/generators/action_mcp/identifier/identifier_generator.rb,
lib/action_mcp/test_helper/progress_notification_assertions.rb,
lib/generators/action_mcp/resource_template/resource_template_generator.rb

Overview

require_relative ‘../../../test/dummy/app/assets/stylesheets/pwa.tailwind.bootstrap.css’

Defined Under Namespace

Modules: Callbacks, Client, ConsoleDetector, Content, CurrentHelpers, GatewayIdentifiers, Generators, Instrumentation, Logging, MCPConsoleHelpers, MCPMessageInspect, Renderable, ResourceCallbacks, SchemaHelpers, Server, TaggedStreamLogging, TestHelper, Transport, Types, UriAmbiguityChecker Classes: ApplicationController, ApplicationRecord, BaseResponse, Capability, Configuration, Current, Engine, FilteredLogger, Gateway, GatewayIdentifier, IntegerArray, JsonRpcHandlerBase, LogSubscriber, OutputSchemaBuilder, Prompt, PromptResponse, PromptsRegistry, RegistryBase, Resource, ResourceResponse, ResourceTemplate, ResourceTemplatesRegistry, Session, StringArray, StructuredContentValidationError, Tool, ToolExecutionJob, ToolResponse, ToolsRegistry, UnauthorizedError

Constant Summary collapse

SUPPORTED_VERSIONS =

Protocol version constants

[
  "2025-11-25", # The Task Master - Tasks, icons, tool naming, polling SSE
  "2025-06-18"  # Dr. Identity McBouncer - elicitation, structured output, resource links
].freeze
LATEST_VERSION =
SUPPORTED_VERSIONS.first.freeze
DEFAULT_PROTOCOL_VERSION =

Default to previous stable version for backwards compatibility

"2025-06-18"
VERSION =
"0.102.0"

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.loggerObject

Returns the value of attribute logger.



405
406
407
# File 'lib/action_mcp/configuration.rb', line 405

def logger
  @logger
end

Class Method Details

.available_promptsActionMCP::RegistryBase::RegistryScope

Returns the available prompts.

Returns:



103
104
105
# File 'lib/action_mcp.rb', line 103

def available_prompts
  PromptsRegistry.available_prompts
end

.available_toolsActionMCP::RegistryBase::RegistryScope

Returns the available tools.

Returns:



96
97
98
# File 'lib/action_mcp.rb', line 96

def available_tools
  ToolsRegistry.available_tools
end

.configurationObject

Returns the configuration instance.



64
65
66
# File 'lib/action_mcp.rb', line 64

def configuration
  @configuration ||= Configuration.new
end

.configure {|configuration| ... } ⇒ Object

Configures the ActionMCP module.

Yields:



72
73
74
# File 'lib/action_mcp.rb', line 72

def configure
  yield(configuration)
end

.create_client(endpoint, transport: :streamable_http, session_store: nil, session_id: nil, protocol_version: nil, logger: Logger.new($stdout), **options) ⇒ Client::Base

Creates a client appropriate for the given endpoint.

Examples:

Basic usage

client = ActionMCP.create_client("http://127.0.0.1:3001/action_mcp")
client.connect

With specific transport and session store

client = ActionMCP.create_client(
  "http://127.0.0.1:3001/action_mcp",
  transport: :streamable_http,
  session_store: :active_record,
  session_id: "existing-session-123"
)

Memory-based for development

client = ActionMCP.create_client(
  "http://127.0.0.1:3001/action_mcp",
  session_store: :memory
)

Parameters:

  • endpoint (String)

    The endpoint to connect to (URL).

  • transport (Symbol) (defaults to: :streamable_http)

    The transport type to use (:streamable_http, :sse for legacy)

  • session_store (Symbol) (defaults to: nil)

    The session store type (:memory, :active_record)

  • session_id (String) (defaults to: nil)

    Optional session ID for resuming connections

  • protocol_version (String) (defaults to: nil)

    The MCP protocol version to use (defaults to ActionMCP::DEFAULT_PROTOCOL_VERSION)

  • logger (Logger) (defaults to: Logger.new($stdout))

    The logger to use. Default is Logger.new($stdout).

  • options (Hash)

    Additional options to pass to the client constructor.

Returns:



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/action_mcp/client.rb', line 38

def self.create_client(endpoint, transport: :streamable_http, session_store: nil, session_id: nil,
                       protocol_version: nil, logger: Logger.new($stdout), **options)
  unless endpoint =~ %r{\Ahttps?://}
    raise ArgumentError, "Only HTTP(S) endpoints are supported. STDIO and other transports are not supported."
  end

  # Create session store
  store = Client::SessionStoreFactory.create(session_store, **options)

  # Create transport
  transport_instance = create_transport(transport, endpoint, session_store: store, session_id: session_id,
                                                             protocol_version: protocol_version, logger: logger, **options)

  logger.info("Creating #{transport} client for endpoint: #{endpoint}")
  # Pass session_id and protocol_version to the client
  Client::Base.new(transport: transport_instance, logger: logger, session_id: session_id,
                   protocol_version: protocol_version, **options)
end

.gem_versionGem::Version

Returns the currently loaded version of Active MCP as a Gem::Version.

Returns:

  • (Gem::Version)

    the currently loaded version of Active MCP



7
8
9
# File 'lib/action_mcp/gem_version.rb', line 7

def self.gem_version
  Gem::Version.new VERSION
end

.promptsHash

Returns the prompts registry.

Returns:

  • (Hash)

    the prompts registry



89
90
91
# File 'lib/action_mcp.rb', line 89

def prompts
  PromptsRegistry.prompts
end

.server#call

Returns a Rack-compatible application for serving MCP requests This makes ActionMCP.server work similar to ActionCable.server

Returns:

  • (#call)

    A Rack application that can be used with ‘run ActionMCP.server`



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/action_mcp.rb', line 49

def server
  @server ||= begin
    # Initialize the actual server for PubSub.
    # The return value is intentionally discarded as only the side effects are needed.
    Server.server

    # Return the Engine as the Rack application
    # The Engine will handle routing to the UnifiedController
    Engine
  end
end

.table_name_prefixObject



4
5
6
# File 'app/models/action_mcp.rb', line 4

def self.table_name_prefix
  "action_mcp_"
end

.thread_profilesObject

Thread-local storage for active profiles



408
409
410
# File 'lib/action_mcp/configuration.rb', line 408

def thread_profiles
  @thread_profiles ||= Concurrent::ThreadLocalVar.new(nil)
end

.toolsHash

Returns the tools registry.

Returns:

  • (Hash)

    the tools registry



82
83
84
# File 'lib/action_mcp.rb', line 82

def tools
  ToolsRegistry.tools
end

.versionObject



8
# File 'lib/action_mcp/version.rb', line 8

alias version gem_version

.with_profile(profile_name) ⇒ Object



422
423
424
425
426
427
428
429
430
431
432
433
434
435
# File 'lib/action_mcp/configuration.rb', line 422

def with_profile(profile_name)
  previous_profile = thread_profiles.value
  thread_profiles.value = profile_name

  # Apply the profile options when switching profiles
  configuration&.apply_profile_options

  yield if block_given?
ensure
  thread_profiles.value = previous_profile if block_given?

  # Reapply the previous profile's options when switching back
  configuration.apply_profile_options if block_given? && configuration
end