swagger_mcp_tool 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b6cf12fe2486b1ca69e692d0ecfdda98dde1184f2a0559ca81ac1f683e1ffb02
4
- data.tar.gz: a3c688bab5b1e810e845cd0b143634dfb84f912f4e4504de9bd47a10efc9aee7
3
+ metadata.gz: a17ce1a95b6b934487c74682672da45a1fb455bc757cd227f8194570173f395f
4
+ data.tar.gz: 0d9e16a449b6e48a885567d134d99646bd596d38b6a3d1ec9dd5606897c57bf4
5
5
  SHA512:
6
- metadata.gz: a0b2ae03de67f6241e845d7f0f980166ef44ebd945f87add61f15d7ca75e90f2afb5488ecd9f20f27c83a64a11f4b1f88878bad727fb66e7e9805a70acdcc5c2
7
- data.tar.gz: c4c1c5896bd5835b5d6304900eb3c7d0c1c530569e90d075359e1858ffddcc1c6bf0c871a3dd23c076de5feed76c578bfb7eeb0c0d1178595fe345a7e2b40a2b
6
+ metadata.gz: 91da95b89b5f2f136829b21c07c759878a553526afcfa6c1d233b8d22c7fb7ffd6434e30be0905a45c9a1afbe7c3caa22a45a2e1e65c33840eb95140659bdd19
7
+ data.tar.gz: c95fdfc6057627469d4caa35580f523f5f469d9ef0c12858ff83c91cce44ace84214c791c6f682dd9757fd1314a0d19baba6bbff864591abb638c3997b144cd7
data/README.md CHANGED
@@ -85,7 +85,7 @@ swagger_mcp_server --help
85
85
 
86
86
  ### STDIO Server (Recommended for MCP Integration)
87
87
 
88
- Use the provided example for direct integration with MCP clients like Vscode IDE:
88
+ Use the provided example for direct integration with MCP clients like Kiro IDE:
89
89
 
90
90
  **File: `examples/mcp_stdio_server.rb`**
91
91
 
@@ -241,7 +241,7 @@ SwaggerMCPTool.configure do |config|
241
241
  config.mcp_name = 'my_company_api'
242
242
  config.mcp_name_for_human = 'My Company API'
243
243
  config.mcp_description_for_human = "Tools for interacting with My Company's API"
244
- config.auth_header_name = :'Token'
244
+ config.auth_header_name = :'X-Auth-Token'
245
245
  end
246
246
 
247
247
  # Start the server
@@ -325,21 +325,21 @@ end
325
325
 
326
326
  ## MCP Integration
327
327
 
328
- ### Vscode IDE Integration
328
+ ### Kiro IDE Integration
329
329
 
330
- To use with Vscode IDE, add the server to your MCP configuration file (`.vscode/settings/mcp.json`):
330
+ To use with Kiro IDE, add the server to your MCP configuration file (`.kiro/settings/mcp.json`):
331
331
 
332
332
  ```json
333
333
  {
334
334
  "mcpServers": {
335
335
  "swagger-mcp-tool": {
336
- "command": "/Users/<user>/.rbenv/versions/3.2.2/bin/ruby",
336
+ "command": "/Users/ankit/.rbenv/versions/3.2.2/bin/ruby",
337
337
  "args": [
338
- "/Users/<user>/swagger_mcp_tool/examples/mcp_stdio_server.rb"
338
+ "/Users/ankit/projects/dummy/swagger_mcp_tool/examples/mcp_stdio_server.rb"
339
339
  ],
340
340
  "env": {
341
341
  "RBENV_VERSION": "3.2.2",
342
- "PATH": "/Users/<user>/.rbenv/versions/3.2.2/bin:/Users/aki/.rbenv/shims:/usr/local/bin:/usr/bin:/bin"
342
+ "PATH": "/Users/ankit/.rbenv/versions/3.2.2/bin:/Users/ankit/.rbenv/shims:/usr/local/bin:/usr/bin:/bin"
343
343
  },
344
344
  "disabled": false,
345
345
  "autoApprove": []
@@ -373,6 +373,16 @@ The server automatically generates MCP tools based on your Swagger specification
373
373
 
374
374
  ## Authentication
375
375
 
376
+ ### Setting an Auth Token (HTTP Server)
377
+
378
+ You can set an auth token for a user by making a POST request to the `/set_auth_token` endpoint:
379
+
380
+ ```bash
381
+ curl -X POST http://localhost:3001/set_auth_token \
382
+ -H "Content-Type: application/json" \
383
+ -d '{"user_id": "user123", "auth_token": "Bearer token123"}'
384
+ ```
385
+
376
386
  ### Passing User Context (HTTP Server)
377
387
 
378
388
  When making requests to the HTTP MCP server, you can pass user context in the headers:
@@ -383,7 +393,7 @@ curl -X POST http://localhost:3001/mcp \
383
393
  -H "X-User-ID: user123" \
384
394
  -H "X-Username: John Doe" \
385
395
  -H "X-Email: john@example.com" \
386
- -H "Auth-Token: Bearer token123" \
396
+ -H "X-Auth-Token: Bearer token123" \
387
397
  -d '{"jsonrpc":"2.0","id":"1","method":"tools/list"}'
388
398
  ```
389
399
 
@@ -424,9 +434,9 @@ When running the HTTP server, the following endpoints are available:
424
434
 
425
435
  ## Testing Your Tools
426
436
 
427
- ### With Vscode IDE
437
+ ### With Kiro IDE
428
438
 
429
- Once configured in Vscode, you can test tools directly:
439
+ Once configured in Kiro, you can test tools directly:
430
440
 
431
441
  ```
432
442
  # Test getInventory (no parameters)
@@ -513,7 +523,7 @@ end
513
523
 
514
524
  - **STDIO Server**: Logs go to stderr, check your terminal output
515
525
  - **HTTP Server**: Logs go to the configured log file (default: `mcp_server.log`)
516
- - **Vscode Integration**: Check Vscode's MCP server logs in the IDE
526
+ - **Kiro Integration**: Check Kiro's MCP server logs in the IDE
517
527
 
518
528
  ### Verifying Tool Generation
519
529
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  require 'logger'
4
4
  require 'singleton'
5
-
6
5
  module SwaggerMCPTool
7
6
  # Configuration management for SwaggerMCPTool
8
7
  #
@@ -15,7 +14,8 @@ module SwaggerMCPTool
15
14
  :log_level, :log_file, :swagger_url, :mcp_name,
16
15
  :mcp_name_for_human, :mcp_description_for_human,
17
16
  :mcp_description_for_model, :auth_type, :default_token,
18
- :prompts, :resources, :auth_header_name, :tools
17
+ :prompts, :resources, :auth_header_name, :tools, :protocol_version,
18
+ :exclude_tools
19
19
 
20
20
  DEFAULT_SERVER_PORT = 3001
21
21
  DEFAULT_SERVER_BIND = '0.0.0.0'
@@ -29,6 +29,7 @@ module SwaggerMCPTool
29
29
  DEFAULT_MCP_DESCRIPTION_FOR_MODEL = 'This MCP server provides tools for interacting with APIs via Swagger/OpenAPI specifications.'
30
30
  DEFAULT_AUTH_TYPE = 'none'
31
31
  DEFAULT_LOG_FILE = nil
32
+ DEFAULT_PROTOCOL_VERSION = "2024-11-05"
32
33
 
33
34
  def initialize
34
35
  # Server settings
@@ -47,6 +48,7 @@ module SwaggerMCPTool
47
48
  @tools = []
48
49
  @resources = []
49
50
  @prompts = [] # Will be generated lazily
51
+ @exclude_tools = []
50
52
  end
51
53
 
52
54
  def setup_server_defaults
@@ -67,6 +69,7 @@ module SwaggerMCPTool
67
69
  @mcp_name_for_human = DEFAULT_MCP_NAME_FOR_HUMAN
68
70
  @mcp_description_for_human = DEFAULT_MCP_DESCRIPTION_FOR_HUMAN
69
71
  @mcp_description_for_model = DEFAULT_MCP_DESCRIPTION_FOR_MODEL
72
+ @protocol_version = DEFAULT_PROTOCOL_VERSION
70
73
  end
71
74
 
72
75
  def setup_auth_defaults
@@ -19,7 +19,7 @@ module SwaggerMCPTool
19
19
  end
20
20
 
21
21
  def create_http_request(method, uri, params)
22
- req_method = request_methods(method.downcase)
22
+ req_method = request_methods(method.downcase&.to_sym)
23
23
  request = req_method.new(uri.request_uri)
24
24
 
25
25
  set_json_body(request, params) if body_required?(method.downcase)
@@ -58,7 +58,10 @@ module SwaggerMCPTool
58
58
 
59
59
  def add_headers_to_request(request, headers, auth_token)
60
60
  # Add custom headers
61
- headers.each { |key, value| request[key] = value }
61
+ headers.each do |key, value|
62
+ next unless valid_header?(key, value)
63
+ request[key] = sanitize_header_value(value)
64
+ end
62
65
 
63
66
  # Add authorization header if available
64
67
  add_authorization_header(request, auth_token)
@@ -109,6 +112,11 @@ module SwaggerMCPTool
109
112
  def filter_unused_params(params, used_params)
110
113
  params.reject { |key, _| used_params.include?(key) }
111
114
  end
115
+
116
+ def sanitize_header_value(value)
117
+ # Remove any potentially dangerous characters
118
+ value.to_s.gsub(/[\r\n\0]/, '')
119
+ end
112
120
  end
113
121
  end
114
122
  end
@@ -2,6 +2,20 @@
2
2
 
3
3
  module SwaggerMCPTool
4
4
  module Helpers
5
+ # Provides helper methods for registering and initializing tools using Swagger definitions.
6
+ # This module includes methods to set up the tool registry, generate tools from a Swagger URL,
7
+ # and handle dynamic tool registration. It is intended to be included in classes that require
8
+ # integration with the SwaggerMCPTool tool registry system.
9
+ #
10
+ # Example usage:
11
+ # include SwaggerMCPTool::Helpers::ToolRegister
12
+ #
13
+ # @see SwaggerMCPTool::ToolRegistry
14
+ # @see SwaggerClient
15
+ # @see ToolGenerator
16
+ #
17
+ # @author Your Name
18
+ # @since 1.0.0
5
19
  module ToolRegister
6
20
  def tool_registry
7
21
  SwaggerMCPTool::ToolRegistry.instance
@@ -5,7 +5,6 @@ require 'sinatra/json'
5
5
  require 'mcp'
6
6
  require 'json'
7
7
  require 'logger'
8
- require 'byebug'
9
8
  require_relative 'tool_registry'
10
9
  require_relative 'logging'
11
10
  require_relative 'config'
@@ -103,7 +102,7 @@ module SwaggerMCPTool
103
102
  self.class.before do
104
103
  headers 'Access-Control-Allow-Origin' => '*',
105
104
  'Access-Control-Allow-Methods' => 'GET, POST, OPTIONS',
106
- 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-User-ID, Auth-Token, X-Username, X-Email'
105
+ 'Access-Control-Allow-Headers' => 'Content-Type, Authorization, X-User-ID, X-Auth-Token, X-Username, X-Email'
107
106
  end
108
107
  end
109
108
 
@@ -111,7 +110,7 @@ module SwaggerMCPTool
111
110
  self.class.options '*' do
112
111
  response.headers['Allow'] = 'GET, POST, OPTIONS'
113
112
  response.headers['Access-Control-Allow-Headers'] =
114
- 'Authorization, Content-Type, Accept, X-User-ID, Auth-Token, X-Username, X-Email'
113
+ 'Authorization, Content-Type, Accept, X-User-ID, X-Auth-Token, X-Username, X-Email'
115
114
  200
116
115
  end
117
116
  end
@@ -0,0 +1,53 @@
1
+ require 'mcp'
2
+ require 'mcp/server/transports/stdio_transport'
3
+ require 'json'
4
+ require 'logger'
5
+ require_relative 'tool_registry'
6
+ require_relative 'logging'
7
+ require_relative 'config'
8
+ require_relative 'helpers/tool_register'
9
+
10
+ module SwaggerMCPTool
11
+ # This module provides the StdioServer for handling MCP tool operations via standard IO.
12
+ # StdioServer handles MCP tool operations via standard IO.
13
+ # It initializes the server, sets up configuration and logging,
14
+ # registers available tools, and starts the server using standard IO transport.
15
+ #
16
+ # @example
17
+ # server = SwaggerMCPTool::StdioServer.new
18
+ # server.start_stdio_server
19
+ #
20
+ # @see SwaggerMCPTool::Logging
21
+ # @see SwaggerMCPTool::Helpers::ToolRegister
22
+ # @see MCP::Server
23
+ # @see MCP::Server::Transports::StdioTransport
24
+ class StdioServer
25
+ include SwaggerMCPTool::Logging
26
+ include SwaggerMCPTool::Helpers::ToolRegister
27
+
28
+ def initialize
29
+ @config = Config.instance
30
+ @logger = @config.logger || Logger.new($stdout)
31
+ log_server_initialization
32
+ setup_tool_registry
33
+ initialize_tools
34
+ end
35
+
36
+ def start_stdio_server(context = {})
37
+ user_details = context
38
+ configuration = MCP::Configuration.new(protocol_version: @config.protocol_version)
39
+
40
+ # Create MCP server with our tools and prompts
41
+ mcp = MCP::Server.new(
42
+ name: @config.mcp_name,
43
+ tools: tool_registry.dynamic_tools,
44
+ prompts: @config.prompts,
45
+ server_context: user_details,
46
+ configuration: configuration
47
+ )
48
+
49
+ transport = MCP::Server::Transports::StdioTransport.new(mcp)
50
+ transport.open
51
+ end
52
+ end
53
+ end
@@ -25,9 +25,12 @@ module SwaggerMCPTool
25
25
  @dynamic_tools = @config.tools if @config&.tools
26
26
  validate_inputs!(tools, base_url)
27
27
  @logger.info "Registering #{tools.size} dynamic tools"
28
-
28
+ excluded_tools = Set.new(@config.exclude_tools)
29
+
29
30
  tools.each do |tool_def|
30
- register_tool(tool_def, base_url) unless tool_exists?(tool_def['name'])
31
+ unless excluded_tools.include?(tool_def['name'])
32
+ register_tool(tool_def, base_url) unless tool_exists?(tool_def['name'])
33
+ end
31
34
  end
32
35
 
33
36
  @logger.info "Successfully registered #{@dynamic_tools.size} tools"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SwaggerMcpTool
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.3'
5
5
  end
@@ -5,7 +5,11 @@ require 'swagger_mcp_tool/swagger_client'
5
5
  require 'swagger_mcp_tool/tool_generator'
6
6
  require 'swagger_mcp_tool/api_client'
7
7
  require 'swagger_mcp_tool/auth_handler'
8
+ require 'swagger_mcp_tool/stdio_server'
8
9
 
10
+ # The SwaggerMCPTool module provides functionality to start and configure a server,
11
+ # as well as to run a stdio-based server for integration with other tools.
12
+ # It defines custom error handling and exposes methods for server lifecycle management.
9
13
  module SwaggerMCPTool
10
14
  class Error < StandardError; end
11
15
 
@@ -18,4 +22,9 @@ module SwaggerMCPTool
18
22
  def self.configure(&block)
19
23
  Config.configure(&block)
20
24
  end
25
+
26
+ def self.start_stdio_server(context={})
27
+ server = StdioServer.new
28
+ server.start_stdio_server(context)
29
+ end
21
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swagger_mcp_tool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ankit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-08-19 00:00:00.000000000 Z
11
+ date: 2025-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -34,16 +34,16 @@ dependencies:
34
34
  name: mcp
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: 0.1.0
39
+ version: 0.3.0
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - "~>"
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.1.0
46
+ version: 0.3.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: puma
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -152,20 +152,6 @@ dependencies:
152
152
  - - ">="
153
153
  - !ruby/object:Gem::Version
154
154
  version: 3.13.1
155
- - !ruby/object:Gem::Dependency
156
- name: yard
157
- requirement: !ruby/object:Gem::Requirement
158
- requirements:
159
- - - "~>"
160
- - !ruby/object:Gem::Version
161
- version: '0.9'
162
- type: :development
163
- prerelease: false
164
- version_requirements: !ruby/object:Gem::Requirement
165
- requirements:
166
- - - "~>"
167
- - !ruby/object:Gem::Version
168
- version: '0.9'
169
155
  description: A Model Context Protocol (MCP) server that generates tools from Swagger/OpenAPI
170
156
  specifications
171
157
  email:
@@ -191,6 +177,7 @@ files:
191
177
  - lib/swagger_mcp_tool/helpers/tool_register.rb
192
178
  - lib/swagger_mcp_tool/logging.rb
193
179
  - lib/swagger_mcp_tool/server.rb
180
+ - lib/swagger_mcp_tool/stdio_server.rb
194
181
  - lib/swagger_mcp_tool/swagger_client.rb
195
182
  - lib/swagger_mcp_tool/tool_generator.rb
196
183
  - lib/swagger_mcp_tool/tool_registry.rb
@@ -207,7 +194,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
194
  requirements:
208
195
  - - ">="
209
196
  - !ruby/object:Gem::Version
210
- version: 3.2.2
197
+ version: '0'
211
198
  required_rubygems_version: !ruby/object:Gem::Requirement
212
199
  requirements:
213
200
  - - ">="