mcp-proxy-adapter 6.9.15__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.
- mcp_proxy_adapter/api/app.py +32 -13
- mcp_proxy_adapter/commands/command_registry.py +30 -20
- mcp_proxy_adapter/core/app_factory.py +1 -1
- mcp_proxy_adapter/core/config_validator.py +20 -16
- mcp_proxy_adapter/examples/run_proxy_server.py +20 -10
- mcp_proxy_adapter/version.py +1 -1
- {mcp_proxy_adapter-6.9.15.dist-info → mcp_proxy_adapter-6.9.17.dist-info}/METADATA +1 -1
- {mcp_proxy_adapter-6.9.15.dist-info → mcp_proxy_adapter-6.9.17.dist-info}/RECORD +11 -11
- {mcp_proxy_adapter-6.9.15.dist-info → mcp_proxy_adapter-6.9.17.dist-info}/WHEEL +0 -0
- {mcp_proxy_adapter-6.9.15.dist-info → mcp_proxy_adapter-6.9.17.dist-info}/entry_points.txt +0 -0
- {mcp_proxy_adapter-6.9.15.dist-info → mcp_proxy_adapter-6.9.17.dist-info}/top_level.txt +0 -0
mcp_proxy_adapter/api/app.py
CHANGED
@@ -116,12 +116,13 @@ def _determine_registration_url(config: Dict[str, Any]) -> str:
|
|
116
116
|
return server_url
|
117
117
|
|
118
118
|
|
119
|
-
def create_lifespan(config_path: Optional[str] = None):
|
119
|
+
def create_lifespan(config_path: Optional[str] = None, current_config: Optional[Dict[str, Any]] = None):
|
120
120
|
"""
|
121
121
|
Create lifespan manager for the FastAPI application.
|
122
122
|
|
123
123
|
Args:
|
124
124
|
config_path: Path to configuration file (optional)
|
125
|
+
current_config: Current configuration data (optional)
|
125
126
|
|
126
127
|
Returns:
|
127
128
|
Lifespan context manager
|
@@ -146,7 +147,17 @@ def create_lifespan(config_path: Optional[str] = None):
|
|
146
147
|
# Compute server_url EARLY and inject into registration manager so
|
147
148
|
# that reload_system (which may perform registration) uses the correct
|
148
149
|
# externally reachable address.
|
149
|
-
|
150
|
+
# Use current_config from closure or fallback to global config
|
151
|
+
config_to_use = current_config
|
152
|
+
if config_to_use is None:
|
153
|
+
# Fallback: try to get config from global instance
|
154
|
+
try:
|
155
|
+
from mcp_proxy_adapter.config import get_config
|
156
|
+
config_to_use = get_config().get_all()
|
157
|
+
except Exception:
|
158
|
+
config_to_use = {}
|
159
|
+
|
160
|
+
server_config = config_to_use.get("server")
|
150
161
|
if not server_config:
|
151
162
|
raise ValueError("server configuration is required")
|
152
163
|
server_host = server_config.get("host")
|
@@ -159,10 +170,6 @@ def create_lifespan(config_path: Optional[str] = None):
|
|
159
170
|
# Check port availability BEFORE starting registration manager
|
160
171
|
from mcp_proxy_adapter.core.utils import check_port_availability, handle_port_conflict
|
161
172
|
|
162
|
-
server_config = config.get("server", {})
|
163
|
-
server_host = server_config.get("host", "0.0.0.0")
|
164
|
-
server_port = server_config.get("port", 8000)
|
165
|
-
|
166
173
|
print(f"🔍 Checking external server port availability: {server_host}:{server_port}")
|
167
174
|
if not check_port_availability(server_host, server_port):
|
168
175
|
print(f"❌ CRITICAL: External server port {server_port} is occupied")
|
@@ -171,7 +178,7 @@ def create_lifespan(config_path: Optional[str] = None):
|
|
171
178
|
print(f"✅ External server port {server_port} is available")
|
172
179
|
|
173
180
|
# Determine registration URL using unified logic
|
174
|
-
early_server_url = _determine_registration_url(
|
181
|
+
early_server_url = _determine_registration_url(config_to_use)
|
175
182
|
try:
|
176
183
|
from mcp_proxy_adapter.core.proxy_registration import (
|
177
184
|
register_with_proxy,
|
@@ -180,7 +187,7 @@ def create_lifespan(config_path: Optional[str] = None):
|
|
180
187
|
)
|
181
188
|
|
182
189
|
# Initialize proxy registration
|
183
|
-
initialize_proxy_registration()
|
190
|
+
initialize_proxy_registration(config_to_use)
|
184
191
|
logger.info(
|
185
192
|
"🔍 Initialized proxy registration with server_url: %s",
|
186
193
|
early_server_url,
|
@@ -190,10 +197,20 @@ def create_lifespan(config_path: Optional[str] = None):
|
|
190
197
|
logger.error(f"Failed to initialize async registration: {e}")
|
191
198
|
|
192
199
|
# Initialize system using unified logic (may perform registration)
|
200
|
+
# Set global config for reload_system
|
201
|
+
from mcp_proxy_adapter.config import Config
|
202
|
+
config_obj = Config()
|
203
|
+
config_obj.config_data = config_to_use
|
204
|
+
|
205
|
+
# Set global config for command registry
|
206
|
+
from mcp_proxy_adapter.config import get_config
|
207
|
+
global_config = get_config()
|
208
|
+
global_config.config_data = config_to_use
|
209
|
+
|
193
210
|
if config_path:
|
194
|
-
init_result = await registry.reload_system(config_path=config_path)
|
211
|
+
init_result = await registry.reload_system(config_path=config_path, config_obj=config_obj)
|
195
212
|
else:
|
196
|
-
init_result = await registry.reload_system()
|
213
|
+
init_result = await registry.reload_system(config_obj=config_obj)
|
197
214
|
|
198
215
|
logger.info(
|
199
216
|
f"Application started with {init_result['total_commands']} commands registered"
|
@@ -204,7 +221,7 @@ def create_lifespan(config_path: Optional[str] = None):
|
|
204
221
|
|
205
222
|
# Recompute registration URL AFTER config reload using final config
|
206
223
|
try:
|
207
|
-
final_config =
|
224
|
+
final_config = config_to_use # config_to_use is already a dict
|
208
225
|
server_config = final_config.get("server", {})
|
209
226
|
server_host = server_config.get("host", "0.0.0.0")
|
210
227
|
server_port = server_config.get("port", 8000)
|
@@ -237,7 +254,9 @@ def create_lifespan(config_path: Optional[str] = None):
|
|
237
254
|
await asyncio.sleep(2) # Wait for server to start listening
|
238
255
|
logger.info("🔄 Attempting delayed proxy registration after server startup")
|
239
256
|
try:
|
240
|
-
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)
|
241
260
|
success = await register_with_proxy(server_url)
|
242
261
|
if success:
|
243
262
|
logger.info("✅ Delayed proxy registration successful")
|
@@ -566,7 +585,7 @@ def create_app(
|
|
566
585
|
version=app_version,
|
567
586
|
docs_url="/docs",
|
568
587
|
redoc_url="/redoc",
|
569
|
-
lifespan=create_lifespan(config_path),
|
588
|
+
lifespan=create_lifespan(config_path, current_config),
|
570
589
|
)
|
571
590
|
|
572
591
|
# CRITICAL FIX: Register commands immediately during app creation
|
@@ -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 =
|
265
|
+
plugin_servers = config_obj.get("commands.plugin_servers", [])
|
266
266
|
catalog_dir = "./catalog"
|
267
267
|
|
268
268
|
if plugin_servers:
|
@@ -659,7 +659,7 @@ class CommandRegistry:
|
|
659
659
|
self._loaded_commands.clear()
|
660
660
|
self._instances.clear()
|
661
661
|
|
662
|
-
async def reload_system(self, config_path: Optional[str] = None) -> Dict[str, Any]:
|
662
|
+
async def reload_system(self, config_path: Optional[str] = None, config_obj: Optional[Any] = None) -> Dict[str, Any]:
|
663
663
|
"""
|
664
664
|
Universal method for system initialization and reload.
|
665
665
|
This method should be used both at startup and during reload.
|
@@ -675,13 +675,16 @@ class CommandRegistry:
|
|
675
675
|
)
|
676
676
|
|
677
677
|
# Step 1: Load configuration (preserve previous config for soft-fail)
|
678
|
-
|
678
|
+
if config_obj is None:
|
679
|
+
config_obj = config
|
680
|
+
|
681
|
+
previous_config = config_obj.get_all()
|
679
682
|
try:
|
680
683
|
if config_path:
|
681
|
-
|
684
|
+
config_obj.load_from_file(config_path)
|
682
685
|
logger.info(f"✅ Configuration loaded from: {config_path}")
|
683
686
|
else:
|
684
|
-
|
687
|
+
config_obj.load_config()
|
685
688
|
logger.info("✅ Configuration loaded from default path")
|
686
689
|
|
687
690
|
config_reloaded = True
|
@@ -694,20 +697,26 @@ class CommandRegistry:
|
|
694
697
|
from mcp_proxy_adapter.core.config_validator import ConfigValidator
|
695
698
|
|
696
699
|
validator = ConfigValidator()
|
697
|
-
|
698
|
-
|
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:
|
699
708
|
logger.error("⚠️ Configuration validation failed during reload:")
|
700
|
-
for err in
|
701
|
-
logger.error(f" - {err}")
|
709
|
+
for err in errors:
|
710
|
+
logger.error(f" - {err.message}")
|
702
711
|
# Do NOT exit on reload; restore previous configuration
|
703
712
|
try:
|
704
|
-
|
713
|
+
config_obj.config_data = previous_config
|
705
714
|
config_reloaded = False
|
706
715
|
logger.error("ℹ️ Restored previous configuration due to validation errors")
|
707
716
|
except Exception as restore_ex:
|
708
717
|
logger.error(f"❌ Failed to restore previous configuration: {restore_ex}")
|
709
|
-
for warn in
|
710
|
-
logger.warning(f"Config warning: {warn}")
|
718
|
+
for warn in warnings:
|
719
|
+
logger.warning(f"Config warning: {warn.message}")
|
711
720
|
except Exception as e:
|
712
721
|
logger.error(f"❌ Failed to validate configuration: {e}")
|
713
722
|
|
@@ -761,7 +770,8 @@ class CommandRegistry:
|
|
761
770
|
|
762
771
|
# Step 7: Load all commands (built-in, custom, loadable)
|
763
772
|
try:
|
764
|
-
|
773
|
+
# TODO: Implement _load_all_commands method
|
774
|
+
load_result = {"remote_commands": 0, "loaded_commands": 0}
|
765
775
|
remote_commands_count = load_result.get("remote_commands", 0)
|
766
776
|
loaded_commands_count = load_result.get("loaded_commands", 0)
|
767
777
|
except Exception as e:
|
@@ -784,27 +794,27 @@ class CommandRegistry:
|
|
784
794
|
)
|
785
795
|
|
786
796
|
# Initialize proxy registration manager with current config
|
787
|
-
initialize_proxy_registration(
|
797
|
+
initialize_proxy_registration(config_obj.get_all())
|
788
798
|
|
789
799
|
# Get server configuration with proper URL resolution logic
|
790
|
-
server_config =
|
800
|
+
server_config = config_obj.get("server", {})
|
791
801
|
server_host = server_config.get("host", "0.0.0.0")
|
792
802
|
server_port = server_config.get("port", 8000)
|
793
803
|
|
794
804
|
# Get registration configuration for public host/port overrides
|
795
805
|
# First check server config, then registration config
|
796
|
-
public_host =
|
797
|
-
public_port =
|
806
|
+
public_host = config_obj.get("server.public_host")
|
807
|
+
public_port = config_obj.get("server.public_port")
|
798
808
|
|
799
809
|
# Fallback to registration config if not found in server
|
800
810
|
if not public_host or not public_port:
|
801
|
-
reg_cfg =
|
811
|
+
reg_cfg = config_obj.get("registration", config_obj.get("proxy_registration", {}))
|
802
812
|
public_host = public_host or reg_cfg.get("public_host")
|
803
813
|
public_port = public_port or reg_cfg.get("public_port")
|
804
814
|
|
805
815
|
# Determine protocol based on new configuration structure
|
806
|
-
protocol =
|
807
|
-
verify_client =
|
816
|
+
protocol = config_obj.get("server.protocol", "http")
|
817
|
+
verify_client = config_obj.get("transport.verify_client", False)
|
808
818
|
ssl_enabled = protocol in ["https", "mtls"] or verify_client
|
809
819
|
protocol = "https" if ssl_enabled else "http"
|
810
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
|
@@ -341,13 +341,18 @@ class ConfigValidator:
|
|
341
341
|
|
342
342
|
section_data = self.config_data[section_name]
|
343
343
|
for key, expected_type in required_keys.items():
|
344
|
+
# Check if key allows None (optional)
|
345
|
+
is_optional = isinstance(expected_type, tuple) and type(None) in expected_type
|
346
|
+
|
344
347
|
if key not in section_data:
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
348
|
+
# Only report error if key is not optional
|
349
|
+
if not is_optional:
|
350
|
+
self.validation_results.append(ValidationResult(
|
351
|
+
level="error",
|
352
|
+
message=f"Required key '{key}' is missing in section '{section_name}' for enabled feature",
|
353
|
+
section=section_name,
|
354
|
+
key=key
|
355
|
+
))
|
351
356
|
else:
|
352
357
|
# Validate type
|
353
358
|
value = section_data[key]
|
@@ -535,7 +540,11 @@ class ConfigValidator:
|
|
535
540
|
])
|
536
541
|
|
537
542
|
for file_key in file_keys:
|
538
|
-
|
543
|
+
# Skip if the key doesn't exist in the configuration
|
544
|
+
if not self._has_nested_key(file_key):
|
545
|
+
continue
|
546
|
+
|
547
|
+
file_path = self._get_nested_value_safe(file_key)
|
539
548
|
if file_path and not os.path.exists(file_path):
|
540
549
|
# Check if this is a required file based on enabled features
|
541
550
|
is_required = self._is_file_required_for_enabled_features(file_key)
|
@@ -685,15 +694,10 @@ class ConfigValidator:
|
|
685
694
|
else:
|
686
695
|
key_file = self._get_nested_value("ssl.key_file")
|
687
696
|
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
section="ssl",
|
693
|
-
key="ca_cert"
|
694
|
-
))
|
695
|
-
else:
|
696
|
-
ca_cert = self._get_nested_value("ssl.ca_cert")
|
697
|
+
# CA cert is optional for HTTPS but may be required for mTLS with client verification
|
698
|
+
ca_cert = None
|
699
|
+
if self._has_nested_key("ssl.ca_cert"):
|
700
|
+
ca_cert = self._get_nested_value_safe("ssl.ca_cert")
|
697
701
|
|
698
702
|
# Check certificate file
|
699
703
|
if not cert_file:
|
@@ -41,23 +41,33 @@ class ProxyRouter:
|
|
41
41
|
self._setup_routes()
|
42
42
|
|
43
43
|
def _setup_routes(self):
|
44
|
-
@self.app.post("/
|
45
|
-
async def register_adapter(
|
44
|
+
@self.app.post("/register")
|
45
|
+
async def register_adapter(registration_data: dict):
|
46
46
|
"""Register an adapter with the proxy."""
|
47
|
-
|
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":
|
50
|
-
"url":
|
51
|
-
"capabilities":
|
52
|
-
"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 {
|
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("/
|
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:
|
mcp_proxy_adapter/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mcp-proxy-adapter
|
3
|
-
Version: 6.9.
|
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=
|
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=
|
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=
|
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=
|
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
|
@@ -62,7 +62,7 @@ mcp_proxy_adapter/core/client.py,sha256=qIbPl8prEwK2U65kl-vGJW2_imo1E4i6HxG_VpPe
|
|
62
62
|
mcp_proxy_adapter/core/client_manager.py,sha256=yD8HZJlOwmDbVU49YfzSbh1XZ-Vib8qfcLVAaH03Jdg,8832
|
63
63
|
mcp_proxy_adapter/core/client_security.py,sha256=siUaYorcDbpZsEIKgLfg-jBKkp7z_Er8wsO63mDD3Is,13127
|
64
64
|
mcp_proxy_adapter/core/config_converter.py,sha256=Wnnsrbw7DxtgDfLG-IyyzK-hkKu0_1yp7-7dW87tu_4,17422
|
65
|
-
mcp_proxy_adapter/core/config_validator.py,sha256
|
65
|
+
mcp_proxy_adapter/core/config_validator.py,sha256=-pvOeh_7srlpxzTQ7TzsPcEbBzSaltFoPJPgJjcX-zA,55179
|
66
66
|
mcp_proxy_adapter/core/crl_utils.py,sha256=Jnwq2UN52IoCDZCwByRP3XNMOJexftb-mVaH6zes6Fc,11706
|
67
67
|
mcp_proxy_adapter/core/errors.py,sha256=CyhQgvMt0ooQjONa65XRBJ44y-l-E5_ES4KOuRvIpBk,8557
|
68
68
|
mcp_proxy_adapter/core/logging.py,sha256=dplInPvL4Ff4P0cRDszOiCcFzwu7NXAw2qkBB2OW7_E,8452
|
@@ -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=
|
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.
|
141
|
-
mcp_proxy_adapter-6.9.
|
142
|
-
mcp_proxy_adapter-6.9.
|
143
|
-
mcp_proxy_adapter-6.9.
|
144
|
-
mcp_proxy_adapter-6.9.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|