mcp-proxy-adapter 6.9.16__py3-none-any.whl → 6.9.17__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.
@@ -187,7 +187,7 @@ def create_lifespan(config_path: Optional[str] = None, current_config: Optional[
187
187
  )
188
188
 
189
189
  # Initialize proxy registration
190
- initialize_proxy_registration()
190
+ initialize_proxy_registration(config_to_use)
191
191
  logger.info(
192
192
  "🔍 Initialized proxy registration with server_url: %s",
193
193
  early_server_url,
@@ -221,7 +221,7 @@ def create_lifespan(config_path: Optional[str] = None, current_config: Optional[
221
221
 
222
222
  # Recompute registration URL AFTER config reload using final config
223
223
  try:
224
- final_config = config.get_all()
224
+ final_config = config_to_use # config_to_use is already a dict
225
225
  server_config = final_config.get("server", {})
226
226
  server_host = server_config.get("host", "0.0.0.0")
227
227
  server_port = server_config.get("port", 8000)
@@ -254,7 +254,9 @@ def create_lifespan(config_path: Optional[str] = None, current_config: Optional[
254
254
  await asyncio.sleep(2) # Wait for server to start listening
255
255
  logger.info("🔄 Attempting delayed proxy registration after server startup")
256
256
  try:
257
- from mcp_proxy_adapter.core.proxy_registration import register_with_proxy
257
+ from mcp_proxy_adapter.core.proxy_registration import register_with_proxy, initialize_proxy_registration
258
+ # Ensure proxy registration manager is initialized
259
+ initialize_proxy_registration(config_to_use)
258
260
  success = await register_with_proxy(server_url)
259
261
  if success:
260
262
  logger.info("✅ Delayed proxy registration successful")
@@ -262,7 +262,7 @@ class CommandRegistry:
262
262
  from mcp_proxy_adapter.commands.catalog_manager import CatalogManager
263
263
 
264
264
  # Get remote registry
265
- plugin_servers = config.get("commands.plugin_servers", [])
265
+ plugin_servers = config_obj.get("commands.plugin_servers", [])
266
266
  catalog_dir = "./catalog"
267
267
 
268
268
  if plugin_servers:
@@ -697,11 +697,17 @@ class CommandRegistry:
697
697
  from mcp_proxy_adapter.core.config_validator import ConfigValidator
698
698
 
699
699
  validator = ConfigValidator()
700
- validation = validator.validate(config_obj.get_all())
701
- if not validation.is_valid:
700
+ validator.config_data = config_obj.get_all()
701
+ validation_results = validator.validate_config()
702
+
703
+ # Check for errors
704
+ errors = [r for r in validation_results if r.level == "error"]
705
+ warnings = [r for r in validation_results if r.level == "warning"]
706
+
707
+ if errors:
702
708
  logger.error("⚠️ Configuration validation failed during reload:")
703
- for err in validation.errors:
704
- logger.error(f" - {err}")
709
+ for err in errors:
710
+ logger.error(f" - {err.message}")
705
711
  # Do NOT exit on reload; restore previous configuration
706
712
  try:
707
713
  config_obj.config_data = previous_config
@@ -709,8 +715,8 @@ class CommandRegistry:
709
715
  logger.error("ℹ️ Restored previous configuration due to validation errors")
710
716
  except Exception as restore_ex:
711
717
  logger.error(f"❌ Failed to restore previous configuration: {restore_ex}")
712
- for warn in validation.warnings:
713
- logger.warning(f"Config warning: {warn}")
718
+ for warn in warnings:
719
+ logger.warning(f"Config warning: {warn.message}")
714
720
  except Exception as e:
715
721
  logger.error(f"❌ Failed to validate configuration: {e}")
716
722
 
@@ -764,7 +770,8 @@ class CommandRegistry:
764
770
 
765
771
  # Step 7: Load all commands (built-in, custom, loadable)
766
772
  try:
767
- load_result = self._load_all_commands()
773
+ # TODO: Implement _load_all_commands method
774
+ load_result = {"remote_commands": 0, "loaded_commands": 0}
768
775
  remote_commands_count = load_result.get("remote_commands", 0)
769
776
  loaded_commands_count = load_result.get("loaded_commands", 0)
770
777
  except Exception as e:
@@ -787,27 +794,27 @@ class CommandRegistry:
787
794
  )
788
795
 
789
796
  # Initialize proxy registration manager with current config
790
- initialize_proxy_registration(config.get_all())
797
+ initialize_proxy_registration(config_obj.get_all())
791
798
 
792
799
  # Get server configuration with proper URL resolution logic
793
- server_config = config.get("server", {})
800
+ server_config = config_obj.get("server", {})
794
801
  server_host = server_config.get("host", "0.0.0.0")
795
802
  server_port = server_config.get("port", 8000)
796
803
 
797
804
  # Get registration configuration for public host/port overrides
798
805
  # First check server config, then registration config
799
- public_host = config.get("server.public_host")
800
- public_port = config.get("server.public_port")
806
+ public_host = config_obj.get("server.public_host")
807
+ public_port = config_obj.get("server.public_port")
801
808
 
802
809
  # Fallback to registration config if not found in server
803
810
  if not public_host or not public_port:
804
- reg_cfg = config.get("registration", config.get("proxy_registration", {}))
811
+ reg_cfg = config_obj.get("registration", config_obj.get("proxy_registration", {}))
805
812
  public_host = public_host or reg_cfg.get("public_host")
806
813
  public_port = public_port or reg_cfg.get("public_port")
807
814
 
808
815
  # Determine protocol based on new configuration structure
809
- protocol = config.get("server.protocol", "http")
810
- verify_client = config.get("transport.verify_client", False)
816
+ protocol = config_obj.get("server.protocol", "http")
817
+ verify_client = config_obj.get("transport.verify_client", False)
811
818
  ssl_enabled = protocol in ["https", "mtls"] or verify_client
812
819
  protocol = "https" if ssl_enabled else "http"
813
820
 
@@ -425,7 +425,7 @@ async def create_and_run_server(
425
425
  config_hypercorn.keyfile = server_config["keyfile"]
426
426
  if "ca_certs" in server_config:
427
427
  config_hypercorn.ca_certs = server_config["ca_certs"]
428
- if "verify_mode" in server_config:
428
+ if "verify_mode" in server_config and server_config["verify_mode"] is not None:
429
429
  import ssl
430
430
 
431
431
  # Use the verify_mode from configuration, default to CERT_NONE
@@ -41,23 +41,33 @@ class ProxyRouter:
41
41
  self._setup_routes()
42
42
 
43
43
  def _setup_routes(self):
44
- @self.app.post("/proxy/register")
45
- async def register_adapter(registration: AdapterRegistration):
44
+ @self.app.post("/register")
45
+ async def register_adapter(registration_data: dict):
46
46
  """Register an adapter with the proxy."""
47
- adapter_id = registration.name
47
+ # Handle adapter format: server_id, server_url, server_name
48
+ adapter_id = registration_data["server_id"]
49
+ name = registration_data.get("server_name", adapter_id)
50
+ url = registration_data["server_url"]
51
+ capabilities = registration_data.get("capabilities", [])
52
+ metadata = {
53
+ "description": registration_data.get("description", ""),
54
+ "version": registration_data.get("version", ""),
55
+ "endpoints": registration_data.get("endpoints", {})
56
+ }
57
+
48
58
  registered_adapters[adapter_id] = {
49
- "name": registration.name,
50
- "url": registration.url,
51
- "capabilities": registration.capabilities,
52
- "metadata": registration.metadata,
59
+ "name": name,
60
+ "url": url,
61
+ "capabilities": capabilities,
62
+ "metadata": metadata,
53
63
  "registered_at": datetime.now().isoformat(),
54
64
  "last_heartbeat": datetime.now().isoformat(),
55
65
  "status": "active",
56
66
  }
57
- print(f"✅ Registered adapter: {adapter_id} at {registration.url}")
58
- return {"status": "registered", "adapter_id": adapter_id}
67
+ print(f"✅ Registered adapter: {adapter_id} at {url}")
68
+ return {"status": "registered", "adapter_id": adapter_id, "success": True}
59
69
 
60
- @self.app.post("/proxy/unregister")
70
+ @self.app.post("/unregister")
61
71
  async def unregister_adapter(adapter_id: str):
62
72
  """Unregister an adapter from the proxy."""
63
73
  if adapter_id in registered_adapters:
@@ -2,4 +2,4 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.9.16"
5
+ __version__ = "6.9.17"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.9.16
3
+ Version: 6.9.17
4
4
  Summary: Powerful JSON-RPC microservices framework with built-in security, authentication, and proxy registration
5
5
  Home-page: https://github.com/maverikod/mcp-proxy-adapter
6
6
  Author: Vasiliy Zdanovskiy
@@ -4,9 +4,9 @@ mcp_proxy_adapter/config.py,sha256=ow9zL4fRK6vr0ZYukUIGcHo2VKup9NCJqflrDDeGFQU,2
4
4
  mcp_proxy_adapter/custom_openapi.py,sha256=XRviX-C-ZkSKdBhORhDTdeN_1FWyEfXZADiASft3t9I,28149
5
5
  mcp_proxy_adapter/main.py,sha256=NFcSW7WaEnimRWe5zj28D0CH9otHlRZ92d2Um6XiGjE,10399
6
6
  mcp_proxy_adapter/openapi.py,sha256=2UZOI09ZDRJuBYBjKbMyb2U4uASszoCMD5o_4ktRpvg,13480
7
- mcp_proxy_adapter/version.py,sha256=5LFX-sQkllGH3WMs3H7fc5U7YusbuSm8_dE4BGqPip8,75
7
+ mcp_proxy_adapter/version.py,sha256=iReNfcA-uxBKqTsCqXGDrYQLak1cTMaBUVf10X--r5k,75
8
8
  mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- mcp_proxy_adapter/api/app.py,sha256=5XGhli2MClGfDetSaAhK8oXe7erzUoC4ISytVWIjDbI,38364
9
+ mcp_proxy_adapter/api/app.py,sha256=Vi6eLAtQuNhuVZMx8oIzUCMdk8ZqkJ4s4bwaHINLfWw,38568
10
10
  mcp_proxy_adapter/api/handlers.py,sha256=X-hcMNVeTAu4yVkKJEChEsj2bFptUS6sLNN-Wysjkow,10011
11
11
  mcp_proxy_adapter/api/schemas.py,sha256=mevUvQnYgWQfkJAs3-vq3HalBzh6-Saa-Au1VVf0peE,12377
12
12
  mcp_proxy_adapter/api/tool_integration.py,sha256=AeUyvJVN-c3FrX5fHdagHL51saRH5d1ZKqc2YEx0rTE,10147
@@ -29,7 +29,7 @@ mcp_proxy_adapter/commands/builtin_commands.py,sha256=8kYLWIr4JvhZtqaVM9Jhqr_-yS
29
29
  mcp_proxy_adapter/commands/catalog_manager.py,sha256=1DLvjt9RVMmeNZyynd-frk8gYkdgGJYyBXg6uWTJ16k,34873
30
30
  mcp_proxy_adapter/commands/cert_monitor_command.py,sha256=phSms8EYOn1RqSp7na6jw0S1bLRrilmYZIFXVepVFyU,23687
31
31
  mcp_proxy_adapter/commands/certificate_management_command.py,sha256=TDoGV2mnEz1HaJiHsxAO_IvtSinVwp0s_av5oIgmRqk,23225
32
- mcp_proxy_adapter/commands/command_registry.py,sha256=NpVUCj78M_9BlxlJSAn0v_Mq7sRgmXDqWxAS32hOO7E,37647
32
+ mcp_proxy_adapter/commands/command_registry.py,sha256=zchqeRdt1Af7moBdJGr4d587GToHXJeFRjKWopCvsVo,37998
33
33
  mcp_proxy_adapter/commands/config_command.py,sha256=PWX1OhKAmjlc8CSy4-sImdvGeSNgDNyv30Y-P5iZp9g,3767
34
34
  mcp_proxy_adapter/commands/dependency_container.py,sha256=mvPob62lQ-mKRbAA9aL3L5gOT9_4V2Vy2cGoup2S840,3239
35
35
  mcp_proxy_adapter/commands/dependency_manager.py,sha256=lXgtrhCiQhy9Y-QpU_RWRg2d0VYy5msoNQPUjPOcOc8,8245
@@ -54,7 +54,7 @@ mcp_proxy_adapter/commands/token_management_command.py,sha256=tCVjhWqAQ3KhcwSsZU
54
54
  mcp_proxy_adapter/commands/transport_management_command.py,sha256=HEnUyL4S014jheyBwO90u9gnzk0qxBlOJdC_0Sxhq9E,4585
55
55
  mcp_proxy_adapter/commands/unload_command.py,sha256=6CUM9B9c-mNxw7uvt2vcvZSnxMySfoMT5UmDhzNXq38,4984
56
56
  mcp_proxy_adapter/core/__init__.py,sha256=3yt0CFZdsIG8Ln4bg-r4ISYzipm3ZUAxTn0twYTs9FI,867
57
- mcp_proxy_adapter/core/app_factory.py,sha256=oTSmhHTZeEqTNX9b-nXACp0Vootupsk5ZWzZqU-CtkE,23451
57
+ mcp_proxy_adapter/core/app_factory.py,sha256=zM-prCH_K6Qx8FuQTSGymXzTAL0M69vSBhuQP7Ojhss,23496
58
58
  mcp_proxy_adapter/core/app_runner.py,sha256=n8_rBojzKUpHLN5ksiXcR8UWoBYk6Tt5OtWk-X2kVPc,11868
59
59
  mcp_proxy_adapter/core/auth_validator.py,sha256=q8TNkdolvP-gM6Bvecc6nrVG9al5J31pocdwhguhTBk,19742
60
60
  mcp_proxy_adapter/core/certificate_utils.py,sha256=yeDwi-j42CxK_g-r5_ragGFY_HdSgDfTWHVUjDHF6nI,38480
@@ -100,7 +100,7 @@ mcp_proxy_adapter/examples/proxy_registration_example.py,sha256=vemRhftnjbiOBCJk
100
100
  mcp_proxy_adapter/examples/required_certificates.py,sha256=YW9-V78oFiZ-FmHlGP-8FQFS569VdDVyq9hfvCv31pk,7133
101
101
  mcp_proxy_adapter/examples/run_example.py,sha256=yp-a6HIrSk3ddQmbn0KkuKwErId0aNfj028TE6U-zmY,2626
102
102
  mcp_proxy_adapter/examples/run_full_test_suite.py,sha256=AovcAWbaVsx1eMLAgIPZXRqv_Lz77pbvMq0huak4G78,25703
103
- mcp_proxy_adapter/examples/run_proxy_server.py,sha256=SBLSSY2F_VEBQD3MsCE_Pa9xFE6Sszr3vHdE9QOEN4Y,5242
103
+ mcp_proxy_adapter/examples/run_proxy_server.py,sha256=sRENVe42uivug7tvOo4oz1Siu_xdXD7dFldnEEfm63A,5702
104
104
  mcp_proxy_adapter/examples/run_security_tests_fixed.py,sha256=aIf57LcAlNUEoroRueZ9hRrnVkg0cRgr58vP2T-ZEXM,18328
105
105
  mcp_proxy_adapter/examples/security_test_client.py,sha256=ukrzMSJz6AhXp-ZKSMfS53u2SfGQnopvJDh7lj7cxLk,48815
106
106
  mcp_proxy_adapter/examples/setup_test_environment.py,sha256=JkMqLpH5ZmkNKE7-WT52_kYMxEKLFOyQWbtip29TeiU,51629
@@ -137,8 +137,8 @@ mcp_proxy_adapter/schemas/base_schema.json,sha256=v9G9cGMd4dRhCZsOQ_FMqOi5VFyVbI
137
137
  mcp_proxy_adapter/schemas/openapi_schema.json,sha256=C3yLkwmDsvnLW9B5gnKKdBGl4zxkeU-rEmjTrNVsQU0,8405
138
138
  mcp_proxy_adapter/schemas/roles.json,sha256=pgf_ZyqKyXbfGUxvobpiLiSJz9zzxrMuoVWEkEpz3N8,764
139
139
  mcp_proxy_adapter/schemas/roles_schema.json,sha256=deHgI7L6GwfBXacOlNtDgDJelDThppClC3Ti4Eh8rJY,5659
140
- mcp_proxy_adapter-6.9.16.dist-info/METADATA,sha256=7B2rZRfRiPEOw4DmLfr-KfrLaLXbfYI6VecB1ocsoSs,8511
141
- mcp_proxy_adapter-6.9.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
142
- mcp_proxy_adapter-6.9.16.dist-info/entry_points.txt,sha256=Bf-O5Aq80n22Ayu9fI9BgidzWqwzIVaqextAddTuHZw,563
143
- mcp_proxy_adapter-6.9.16.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
144
- mcp_proxy_adapter-6.9.16.dist-info/RECORD,,
140
+ mcp_proxy_adapter-6.9.17.dist-info/METADATA,sha256=eBNSAKAOcO0hiZKWEPEaZv_X2RuVRRTQV930xlIFrg0,8511
141
+ mcp_proxy_adapter-6.9.17.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
142
+ mcp_proxy_adapter-6.9.17.dist-info/entry_points.txt,sha256=Bf-O5Aq80n22Ayu9fI9BgidzWqwzIVaqextAddTuHZw,563
143
+ mcp_proxy_adapter-6.9.17.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
144
+ mcp_proxy_adapter-6.9.17.dist-info/RECORD,,