mcp-proxy-adapter 6.3.11__py3-none-any.whl → 6.3.13__py3-none-any.whl

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.
@@ -18,6 +18,7 @@ def main():
18
18
  """Main CLI entry point."""
19
19
  # Import and run the actual main function from main.py
20
20
  from mcp_proxy_adapter.main import main as run_server
21
+
21
22
  run_server()
22
23
 
23
24
 
@@ -275,7 +275,12 @@ async def create_and_run_server(
275
275
  server_config["certfile"] = ssl_config.get("cert_file")
276
276
  server_config["keyfile"] = ssl_config.get("key_file")
277
277
  server_config["ca_certs"] = ssl_config.get("ca_cert_file")
278
- server_config["verify_mode"] = ssl_config.get("verify_mode")
278
+ # Set verify_mode based on verify_client setting
279
+ verify_client = ssl_config.get("verify_client", False)
280
+ if verify_client:
281
+ server_config["verify_mode"] = "CERT_REQUIRED"
282
+ else:
283
+ server_config["verify_mode"] = "CERT_NONE"
279
284
  print(f"🔒 SSL enabled: {ssl_config.get('cert_file', 'N/A')}")
280
285
  print(
281
286
  f"🔒 SSL enabled: cert={ssl_config.get('cert_file')}, key={ssl_config.get('key_file')}"
@@ -315,7 +320,12 @@ async def create_and_run_server(
315
320
  server_config["certfile"] = ssl_config.get("cert_file")
316
321
  server_config["keyfile"] = ssl_config.get("key_file")
317
322
  server_config["ca_certs"] = ssl_config.get("ca_cert_file")
318
- server_config["verify_mode"] = ssl_config.get("verify_mode")
323
+ # Set verify_mode based on verify_client setting
324
+ verify_client = ssl_config.get("verify_client", False)
325
+ if verify_client:
326
+ server_config["verify_mode"] = "CERT_REQUIRED"
327
+ else:
328
+ server_config["verify_mode"] = "CERT_NONE"
319
329
  print(f"🔒 SSL enabled: {ssl_config.get('cert_file', 'N/A')}")
320
330
  print(
321
331
  f"🔒 SSL enabled: cert={ssl_config.get('cert_file')}, key={ssl_config.get('key_file')}"
@@ -349,8 +359,14 @@ async def create_and_run_server(
349
359
  config_hypercorn.ca_certs = server_config["ca_certs"]
350
360
  if "verify_mode" in server_config:
351
361
  import ssl
352
-
353
- config_hypercorn.verify_mode = ssl.CERT_REQUIRED
362
+ # Use the verify_mode from configuration, default to CERT_NONE for simple HTTPS
363
+ verify_mode = server_config.get("verify_mode", ssl.CERT_NONE)
364
+ if verify_mode == "CERT_REQUIRED":
365
+ config_hypercorn.verify_mode = ssl.CERT_REQUIRED
366
+ elif verify_mode == "CERT_OPTIONAL":
367
+ config_hypercorn.verify_mode = ssl.CERT_OPTIONAL
368
+ else:
369
+ config_hypercorn.verify_mode = ssl.CERT_NONE
354
370
 
355
371
  # Determine if SSL is enabled
356
372
  ssl_enabled = any(key in server_config for key in ["certfile", "keyfile"])
@@ -74,7 +74,7 @@ class ClientSecurityManager:
74
74
  def _create_ssl_config(self) -> SSLConfig:
75
75
  """Create SSL configuration for client connections."""
76
76
  ssl_section = self.security_config.get("ssl", {})
77
-
77
+
78
78
  # Determine verify_mode based on verify_server setting
79
79
  verify_server = ssl_section.get("verify_server", True)
80
80
  if verify_server:
@@ -147,19 +147,84 @@ class ProxyRegistrationManager:
147
147
 
148
148
  def _create_ssl_context(self) -> Optional[ssl.SSLContext]:
149
149
  """
150
- Create SSL context for secure connections.
150
+ Create SSL context for secure connections using registration SSL configuration.
151
151
 
152
152
  Returns:
153
153
  SSL context or None if SSL not needed
154
154
  """
155
+ logger.debug("_create_ssl_context called")
155
156
  if not self.client_security:
157
+ logger.debug("SSL context creation failed: client_security is None")
156
158
  return None
157
159
 
158
160
  try:
159
161
  # Check if SSL is enabled for registration
160
162
  cert_config = self.registration_config.get("certificate", {})
161
- if cert_config.get("enabled", False):
162
- return self.client_security.create_client_ssl_context()
163
+ ssl_config = self.registration_config.get("ssl", {})
164
+
165
+ logger.debug(
166
+ f"SSL context creation: cert_config={cert_config}, ssl_config={ssl_config}"
167
+ )
168
+
169
+ # SSL is enabled if certificate config exists or SSL config exists
170
+ if cert_config or ssl_config:
171
+ # Create a custom SSL context based on registration configuration
172
+ context = ssl.create_default_context()
173
+
174
+ # Load client certificates if provided
175
+ if cert_config:
176
+ cert_file = cert_config.get("cert_file")
177
+ key_file = cert_config.get("key_file")
178
+
179
+ if cert_file and key_file:
180
+ context.load_cert_chain(cert_file, key_file)
181
+ logger.debug(
182
+ f"Loaded client certificates: {cert_file}, {key_file}"
183
+ )
184
+
185
+ # Configure SSL verification based on registration settings
186
+ if ssl_config:
187
+ ca_cert_file = ssl_config.get("ca_cert")
188
+ verify_mode = ssl_config.get("verify_mode", "CERT_REQUIRED")
189
+
190
+ # Load CA certificate if provided
191
+ if ca_cert_file:
192
+ context.load_verify_locations(ca_cert_file)
193
+ logger.debug(f"Loaded CA certificate: {ca_cert_file}")
194
+
195
+ # Set verification mode based on ssl_config verify_mode
196
+ if verify_mode == "CERT_NONE":
197
+ context.check_hostname = False
198
+ context.verify_mode = ssl.CERT_NONE
199
+ logger.debug("SSL verification disabled (CERT_NONE)")
200
+ elif verify_mode == "CERT_REQUIRED":
201
+ context.check_hostname = True
202
+ context.verify_mode = ssl.CERT_REQUIRED
203
+ logger.debug("SSL verification enabled (CERT_REQUIRED)")
204
+ else:
205
+ # Default to CERT_REQUIRED
206
+ context.check_hostname = True
207
+ context.verify_mode = ssl.CERT_REQUIRED
208
+ logger.debug("SSL verification enabled (default)")
209
+ else:
210
+ # Check certificate config for verify_server setting
211
+ verify_server = cert_config.get("verify_server", True)
212
+ if not verify_server:
213
+ context.check_hostname = False
214
+ context.verify_mode = ssl.CERT_NONE
215
+ logger.debug("SSL verification disabled (verify_server: false)")
216
+ else:
217
+ # Default SSL context if no specific SSL config
218
+ context.check_hostname = True
219
+ context.verify_mode = ssl.CERT_REQUIRED
220
+ logger.debug("Using default SSL verification")
221
+
222
+ logger.info("Created custom SSL context for proxy registration")
223
+ return context
224
+ else:
225
+ logger.debug(
226
+ "SSL context creation skipped: no cert_config or ssl_config"
227
+ )
163
228
 
164
229
  return None
165
230
  except Exception as e:
@@ -11,7 +11,7 @@ import argparse
11
11
  from pathlib import Path
12
12
 
13
13
  # Add the framework to the path
14
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
14
+ sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent))
15
15
  from mcp_proxy_adapter.core.app_factory import create_and_run_server
16
16
 
17
17
 
@@ -37,14 +37,15 @@ def main():
37
37
  print(f"📋 Configuration: {args.config}")
38
38
  print("=" * 50)
39
39
  # Use the factory method to create and run the server
40
- create_and_run_server(
40
+ import asyncio
41
+ asyncio.run(create_and_run_server(
41
42
  config_path=args.config,
42
43
  title="Basic Framework Example",
43
44
  description="Basic MCP Proxy Adapter with minimal configuration",
44
45
  version="1.0.0",
45
46
  host=config_overrides.get("host", "0.0.0.0"),
46
47
  log_level="debug" if config_overrides.get("debug", False) else "info",
47
- )
48
+ ))
48
49
 
49
50
 
50
51
  if __name__ == "__main__":
@@ -16,7 +16,7 @@ import logging
16
16
  from pathlib import Path
17
17
 
18
18
  # Add the framework to the path
19
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
19
+ sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent))
20
20
  from mcp_proxy_adapter.core.app_factory import create_and_run_server
21
21
  from mcp_proxy_adapter.api.app import create_app
22
22
  from mcp_proxy_adapter.config import Config