Class: SwaggerMCPTool::Server
- Inherits:
-
Sinatra::Base
- Object
- Sinatra::Base
- SwaggerMCPTool::Server
- Includes:
- Helpers::ToolRegister, Logging
- Defined in:
- lib/swagger_mcp_tool/server.rb
Overview
The Server class is the main Sinatra-based HTTP server for the SwaggerMCPTool. It provides endpoints for manifest retrieval, tool generation, authentication token management, and health checks. The server dynamically generates tools from a Swagger/OpenAPI specification, manages user authentication, and integrates with the MCP (Model Control Protocol) server.
Key responsibilities:
-
Initializes configuration and tool registry on startup.
-
Exposes RESTful endpoints for manifest, MCP requests, tool generation, and health checks.
-
Handles CORS and server configuration.
-
Dynamically generates and registers tools from a Swagger URL.
-
Manages user authentication tokens and server context.
Endpoints:
-
GET /mcp/manifest : Returns the MCP manifest for integration.
-
POST /mcp : Handles MCP requests with dynamic tools.
-
POST /set_auth_token : Sets authentication tokens for users.
-
POST /generate_tools : Generates tools from a provided Swagger URL.
-
GET /logo.png : Serves the logo image.
-
GET /health : Health check and server status.
Usage:
SwaggerMCPTool::Server.start
Dependencies:
-
Sinatra::Base
-
SwaggerMCPTool::Config
-
SwaggerMCPTool::ToolRegistry
-
SwaggerClient
-
ToolGenerator
-
MCP::Server
Configuration is managed via the Config singleton, and tools are registered dynamically via the ToolRegistry singleton.
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#dynamic_tools ⇒ Object
readonly
Returns the value of attribute dynamic_tools.
Class Method Summary collapse
-
.start ⇒ Object
Start the server.
Instance Method Summary collapse
- #add_options ⇒ Object
- #configure_server ⇒ Object
- #enable_cors ⇒ Object
-
#initialize(app = nil) ⇒ Server
constructor
Initialize with configuration.
Methods included from Helpers::ToolRegister
#generate_tools_from_swagger_url, #initialize_tools, #setup_tool_registry, #tool_registry
Methods included from Logging
#log_and_raise_error, #log_message, #log_request_details, #log_request_execution, #log_server_initialization
Constructor Details
#initialize(app = nil) ⇒ Server
Initialize with configuration
54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/swagger_mcp_tool/server.rb', line 54 def initialize(app = nil) super(app) @config = Config.instance # Debug configuration values log_server_initialization # Generate tools on startup setup_tool_registry initialize_tools # Configure server settings configure_server end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
48 49 50 |
# File 'lib/swagger_mcp_tool/server.rb', line 48 def config @config end |
#dynamic_tools ⇒ Object (readonly)
Returns the value of attribute dynamic_tools.
48 49 50 |
# File 'lib/swagger_mcp_tool/server.rb', line 48 def dynamic_tools @dynamic_tools end |
Class Method Details
.start ⇒ Object
Start the server
83 84 85 86 87 |
# File 'lib/swagger_mcp_tool/server.rb', line 83 def self.start # self.define_routes new run! end |
Instance Method Details
#add_options ⇒ Object
109 110 111 112 113 114 115 116 |
# File 'lib/swagger_mcp_tool/server.rb', line 109 def self.class. '*' do response.headers['Allow'] = 'GET, POST, OPTIONS' response.headers['Access-Control-Allow-Headers'] = 'Authorization, Content-Type, Accept, X-User-ID, X-Auth-Token, X-Username, X-Email' 200 end end |
#configure_server ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/swagger_mcp_tool/server.rb', line 89 def configure_server self.class.set :server, @config.server_type self.class.set :bind, @config.server_bind self.class.set :port, @config.server_port # Enable CORS enable_cors # Add options headers end |
#enable_cors ⇒ Object
101 102 103 104 105 106 107 |
# File 'lib/swagger_mcp_tool/server.rb', line 101 def enable_cors self.class.before do headers 'Access-Control-Allow-Origin' => '*', 'Access-Control-Allow-Methods' => 'GET, POST, OPTIONS', 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-User-ID, X-Auth-Token, X-Username, X-Email' end end |