Use autoload to defer loading of unused subsystems
## Motivation and Context `lib/mcp.rb` currently declares all `require_relative` statements in one place. As a result, Server and Client are both loaded, the stdio and Streamable HTTP transports are both loaded, and Tool, Prompt, and Resource are all loaded, regardless of which components are actually used. These components are selected by the user depending on their use case, so loading everything upfront is unnecessary. Using `autoload` for selected constants defers loading until the constant is actually referenced, so only the subsystems required by the user are loaded. ## How Has This Been Tested? All existing tests pass unchanged. ## Breaking Change None. This change only defers loading of unused components.
This commit is contained in:
parent
a2514a0ef2
commit
0c729d0a2d
11 changed files with 42 additions and 28 deletions
36
lib/mcp.rb
36
lib/mcp.rb
|
|
@ -1,38 +1,22 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative "json_rpc_handler"
|
require_relative "json_rpc_handler"
|
||||||
require_relative "mcp/annotations"
|
|
||||||
require_relative "mcp/configuration"
|
require_relative "mcp/configuration"
|
||||||
require_relative "mcp/content"
|
|
||||||
require_relative "mcp/icon"
|
|
||||||
require_relative "mcp/instrumentation"
|
|
||||||
require_relative "mcp/methods"
|
|
||||||
require_relative "mcp/progress"
|
|
||||||
require_relative "mcp/prompt"
|
|
||||||
require_relative "mcp/prompt/argument"
|
|
||||||
require_relative "mcp/prompt/message"
|
|
||||||
require_relative "mcp/prompt/result"
|
|
||||||
require_relative "mcp/resource"
|
|
||||||
require_relative "mcp/resource/contents"
|
|
||||||
require_relative "mcp/resource/embedded"
|
|
||||||
require_relative "mcp/resource_template"
|
|
||||||
require_relative "mcp/server"
|
|
||||||
require_relative "mcp/server_context"
|
|
||||||
require_relative "mcp/server/transports/streamable_http_transport"
|
|
||||||
require_relative "mcp/server/transports/stdio_transport"
|
|
||||||
require_relative "mcp/string_utils"
|
require_relative "mcp/string_utils"
|
||||||
require_relative "mcp/tool"
|
|
||||||
require_relative "mcp/tool/input_schema"
|
|
||||||
require_relative "mcp/tool/output_schema"
|
|
||||||
require_relative "mcp/tool/response"
|
|
||||||
require_relative "mcp/tool/annotations"
|
|
||||||
require_relative "mcp/transport"
|
require_relative "mcp/transport"
|
||||||
require_relative "mcp/version"
|
require_relative "mcp/version"
|
||||||
require_relative "mcp/client"
|
|
||||||
require_relative "mcp/client/http"
|
|
||||||
require_relative "mcp/client/tool"
|
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
|
autoload :Annotations, "mcp/annotations"
|
||||||
|
autoload :Client, "mcp/client"
|
||||||
|
autoload :Content, "mcp/content"
|
||||||
|
autoload :Icon, "mcp/icon"
|
||||||
|
autoload :Prompt, "mcp/prompt"
|
||||||
|
autoload :Resource, "mcp/resource"
|
||||||
|
autoload :ResourceTemplate, "mcp/resource_template"
|
||||||
|
autoload :Server, "mcp/server"
|
||||||
|
autoload :Tool, "mcp/tool"
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def configure
|
def configure
|
||||||
yield(configuration)
|
yield(configuration)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "client/http"
|
||||||
|
require_relative "client/tool"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class Client
|
class Client
|
||||||
# Initializes a new MCP::Client instance.
|
# Initializes a new MCP::Client instance.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "prompt/argument"
|
||||||
|
require_relative "prompt/message"
|
||||||
|
require_relative "prompt/result"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class Prompt
|
class Prompt
|
||||||
class << self
|
class << self
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "resource/contents"
|
||||||
|
require_relative "resource/embedded"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class Resource
|
class Resource
|
||||||
attr_reader :uri, :name, :title, :description, :icons, :mime_type
|
attr_reader :uri, :name, :title, :description, :icons, :mime_type
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,9 @@ require_relative "../json_rpc_handler"
|
||||||
require_relative "instrumentation"
|
require_relative "instrumentation"
|
||||||
require_relative "methods"
|
require_relative "methods"
|
||||||
require_relative "logging_message_notification"
|
require_relative "logging_message_notification"
|
||||||
|
require_relative "progress"
|
||||||
|
require_relative "server_context"
|
||||||
|
require_relative "server/transports"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class ToolNotUnique < StandardError
|
class ToolNotUnique < StandardError
|
||||||
|
|
|
||||||
10
lib/mcp/server/transports.rb
Normal file
10
lib/mcp/server/transports.rb
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module MCP
|
||||||
|
class Server
|
||||||
|
module Transports
|
||||||
|
autoload :StdioTransport, "mcp/server/transports/stdio_transport"
|
||||||
|
autoload :StreamableHTTPTransport, "mcp/server/transports/streamable_http_transport"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative "../../transport"
|
|
||||||
require "json"
|
require "json"
|
||||||
|
require_relative "../../transport"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class Server
|
class Server
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative "../../transport"
|
|
||||||
require "json"
|
require "json"
|
||||||
require "securerandom"
|
require "securerandom"
|
||||||
|
require_relative "../../transport"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class Server
|
class Server
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,10 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative "tool/annotations"
|
||||||
|
require_relative "tool/input_schema"
|
||||||
|
require_relative "tool/output_schema"
|
||||||
|
require_relative "tool/response"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class Tool
|
class Tool
|
||||||
class << self
|
class << self
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "test_helper"
|
require "test_helper"
|
||||||
|
require "mcp/instrumentation"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class InstrumentationTest < ActiveSupport::TestCase
|
class InstrumentationTest < ActiveSupport::TestCase
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require "test_helper"
|
require "test_helper"
|
||||||
|
require "mcp/methods"
|
||||||
|
|
||||||
module MCP
|
module MCP
|
||||||
class MethodsTest < ActiveSupport::TestCase
|
class MethodsTest < ActiveSupport::TestCase
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue