mcp-proxy-adapter 6.6.9__py3-none-any.whl → 6.7.1__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.
@@ -12,10 +12,10 @@ import sys
12
12
  from pathlib import Path
13
13
  from typing import Dict, Any, Optional
14
14
 
15
- # Add the project root to the path to import config_builder
16
- sys.path.insert(0, str(Path(__file__).parent.parent.parent))
15
+ # Add the current directory to the path to import config_builder
16
+ sys.path.insert(0, str(Path(__file__).parent))
17
17
 
18
- from mcp_proxy_adapter.examples.config_builder import ConfigBuilder, ConfigFactory, Protocol, AuthMethod
18
+ from config_builder import ConfigBuilder, ConfigFactory, Protocol, AuthMethod
19
19
 
20
20
 
21
21
  def create_config_from_flags(
@@ -28,7 +28,9 @@ def create_config_from_flags(
28
28
  key_dir: str = "./keys",
29
29
  output_dir: str = "./configs",
30
30
  proxy_registration: bool = False,
31
- proxy_url: str = "http://localhost:3004"
31
+ proxy_url: str = "http://localhost:3004",
32
+ auto_registration: bool = False,
33
+ server_id: str = "mcp_proxy_adapter"
32
34
  ) -> Dict[str, Any]:
33
35
  """
34
36
  Create configuration based on command line flags.
@@ -46,10 +48,10 @@ def create_config_from_flags(
46
48
  Returns:
47
49
  Configuration dictionary
48
50
  """
49
- # Use the simplified config builder
50
- from config_builder import create_config_from_flags as simple_create_config
51
+ # Use the enhanced config builder
52
+ from config_builder import create_config_from_flags as enhanced_create_config
51
53
 
52
- return simple_create_config(protocol, token, roles, port, proxy_registration, proxy_url)
54
+ return enhanced_create_config(protocol, token, roles, port, proxy_registration, proxy_url, auto_registration, server_id)
53
55
 
54
56
 
55
57
  def save_config(config: Dict[str, Any], filename: str, output_dir: str) -> Path:
@@ -262,6 +264,8 @@ Examples:
262
264
  help="Proxy URL for registration (default: http://localhost:3004)")
263
265
  parser.add_argument("--auto-registration", action="store_true",
264
266
  help="Enable automatic proxy registration (same as --proxy-registration)")
267
+ parser.add_argument("--server-id", default="mcp_proxy_adapter",
268
+ help="Server ID for registration (default: mcp_proxy_adapter)")
265
269
  parser.add_argument("--all", action="store_true",
266
270
  help="Generate all standard configurations")
267
271
  parser.add_argument("--full-config", action="store_true",
@@ -313,15 +317,16 @@ Examples:
313
317
  print(f"✅ Full configuration saved to: {config_file}")
314
318
  elif args.protocol:
315
319
  # Generate specific configuration
316
- config = create_config_from_flags(
317
- protocol=args.protocol,
318
- token=args.token,
319
- roles=args.roles,
320
- port=args.port,
321
- proxy_registration=args.proxy_registration,
322
- proxy_url=args.proxy_url,
323
- auto_registration=args.auto_registration
324
- )
320
+ config = create_config_from_flags(
321
+ protocol=args.protocol,
322
+ token=args.token,
323
+ roles=args.roles,
324
+ port=args.port,
325
+ proxy_registration=args.proxy_registration,
326
+ proxy_url=args.proxy_url,
327
+ auto_registration=args.auto_registration,
328
+ server_id=args.server_id
329
+ )
325
330
 
326
331
  if args.stdout:
327
332
  # Output to stdout
mcp_proxy_adapter/main.py CHANGED
@@ -21,6 +21,7 @@ if not str(Path(__file__).parent.parent) in sys.path:
21
21
  from mcp_proxy_adapter.api.app import create_app
22
22
  from mcp_proxy_adapter.config import Config
23
23
  from mcp_proxy_adapter.core.config_validator import ConfigValidator
24
+ from mcp_proxy_adapter.core.signal_handler import setup_signal_handling, is_shutdown_requested
24
25
 
25
26
 
26
27
  def main():
@@ -52,6 +53,30 @@ def main():
52
53
  sys.exit(1)
53
54
  print("✅ Configuration validation passed")
54
55
 
56
+ # Setup signal handling for graceful shutdown
57
+ def shutdown_callback():
58
+ """Callback for graceful shutdown with proxy unregistration."""
59
+ print("\n🛑 Graceful shutdown initiated...")
60
+ try:
61
+ from mcp_proxy_adapter.core.async_proxy_registration import (
62
+ stop_async_registration,
63
+ get_registration_status,
64
+ )
65
+
66
+ # Get final status
67
+ final_status = get_registration_status()
68
+ print(f"📊 Final registration status: {final_status}")
69
+
70
+ # Stop async registration (this will unregister from proxy)
71
+ stop_async_registration()
72
+ print("✅ Proxy unregistration completed")
73
+
74
+ except Exception as e:
75
+ print(f"❌ Error during shutdown: {e}")
76
+
77
+ setup_signal_handling(shutdown_callback)
78
+ print("🔧 Signal handling configured for graceful shutdown")
79
+
55
80
  # Create application (pass config_path so reload uses same file)
56
81
  app = create_app(app_config=config.get_all(), config_path=args.config)
57
82
 
@@ -64,8 +89,23 @@ def main():
64
89
  verify_client = config.get("transport.verify_client", False)
65
90
  chk_hostname = config.get("transport.chk_hostname", False)
66
91
 
67
- # SSL enabled if protocol is HTTPS or mTLS (verify_client=True)
68
- ssl_enabled = protocol in ["https", "mtls"] or verify_client
92
+ # Check if mTLS is required
93
+ is_mtls_mode = protocol == "mtls" or verify_client
94
+
95
+ if is_mtls_mode:
96
+ # mTLS mode: hypercorn on localhost, mTLS proxy on external port
97
+ hypercorn_host = "127.0.0.1" # localhost only
98
+ hypercorn_port = port + 1000 # internal port
99
+ mtls_proxy_port = port # external port
100
+ ssl_enabled = True
101
+ print(f"🔐 mTLS Mode: hypercorn on {hypercorn_host}:{hypercorn_port}, mTLS proxy on {host}:{mtls_proxy_port}")
102
+ else:
103
+ # Regular mode: hypercorn on external port (no proxy needed)
104
+ hypercorn_host = host
105
+ hypercorn_port = port
106
+ mtls_proxy_port = None
107
+ ssl_enabled = protocol == "https"
108
+ print(f"🌐 Regular Mode: hypercorn on {hypercorn_host}:{hypercorn_port}")
69
109
 
70
110
  # SSL configuration based on protocol
71
111
  ssl_cert_file = None
@@ -93,7 +133,11 @@ def main():
93
133
  print("🔍 Source: configuration")
94
134
 
95
135
  print("🚀 Starting MCP Proxy Adapter")
96
- print(f"🌐 Server: {host}:{port}")
136
+ if mtls_proxy_port:
137
+ print(f"🔐 mTLS Proxy: {host}:{mtls_proxy_port}")
138
+ print(f"🌐 Internal Server: {hypercorn_host}:{hypercorn_port}")
139
+ else:
140
+ print(f"🌐 Server: {hypercorn_host}:{hypercorn_port}")
97
141
  print(f"🔒 Protocol: {protocol}")
98
142
  if ssl_enabled:
99
143
  print("🔐 SSL: Enabled")
@@ -106,7 +150,7 @@ def main():
106
150
 
107
151
  # Configure hypercorn using framework
108
152
  config_hypercorn = hypercorn.config.Config()
109
- config_hypercorn.bind = [f"{host}:{port}"]
153
+ config_hypercorn.bind = [f"{hypercorn_host}:{hypercorn_port}"]
110
154
 
111
155
  if ssl_enabled and ssl_cert_file and ssl_key_file:
112
156
  # Use framework to convert SSL configuration
@@ -170,9 +214,46 @@ def main():
170
214
  print("🔐 Starting HTTPS server with hypercorn...")
171
215
  else:
172
216
  print("🌐 Starting HTTP server with hypercorn...")
217
+
218
+ print("🛑 Use Ctrl+C or send SIGTERM for graceful shutdown")
219
+ print("=" * 50)
173
220
 
174
221
  # Run the server
175
- asyncio.run(hypercorn.asyncio.serve(app, config_hypercorn))
222
+ try:
223
+ if is_mtls_mode:
224
+ # mTLS mode: start hypercorn and mTLS proxy
225
+ print("🔐 Starting mTLS mode with proxy...")
226
+
227
+ async def run_mtls_mode():
228
+ # Start hypercorn server on localhost
229
+ hypercorn_task = asyncio.create_task(
230
+ hypercorn.asyncio.serve(app, config_hypercorn)
231
+ )
232
+
233
+ # Start mTLS proxy on external port
234
+ from mcp_proxy_adapter.core.mtls_proxy import start_mtls_proxy
235
+ proxy = await start_mtls_proxy(config.get_all())
236
+
237
+ if proxy:
238
+ print("✅ mTLS proxy started successfully")
239
+ else:
240
+ print("⚠️ mTLS proxy not started, running hypercorn only")
241
+
242
+ # Wait for hypercorn
243
+ await hypercorn_task
244
+
245
+ asyncio.run(run_mtls_mode())
246
+ else:
247
+ # Regular mode: start hypercorn only (no proxy needed)
248
+ print("🌐 Starting regular mode...")
249
+ asyncio.run(hypercorn.asyncio.serve(app, config_hypercorn))
250
+ except KeyboardInterrupt:
251
+ print("\n🛑 Server stopped by user (Ctrl+C)")
252
+ if is_shutdown_requested():
253
+ print("✅ Graceful shutdown completed")
254
+ except Exception as e:
255
+ print(f"\n❌ Server error: {e}")
256
+ sys.exit(1)
176
257
 
177
258
 
178
259
  if __name__ == "__main__":
@@ -2,4 +2,4 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.6.9"
5
+ __version__ = "6.7.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.6.9
3
+ Version: 6.7.1
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
@@ -2,11 +2,11 @@ mcp_proxy_adapter/__init__.py,sha256=iH0EBBsRj_cfZJpAIsgN_8tTdfefhnl6uUKHjLHhWDQ
2
2
  mcp_proxy_adapter/__main__.py,sha256=sq3tANRuTd18euamt0Bmn1sJeAyzXENZ5VvsMwbrDFA,579
3
3
  mcp_proxy_adapter/config.py,sha256=QpoPaUKcWJ-eu6HYphhIZmkc2M-p1JgpLFAgolf_l5s,20161
4
4
  mcp_proxy_adapter/custom_openapi.py,sha256=XRviX-C-ZkSKdBhORhDTdeN_1FWyEfXZADiASft3t9I,28149
5
- mcp_proxy_adapter/main.py,sha256=eXIRMLgDgCox9p2WDcOS9D6tiZjcFit8ePbFCfGbs3Q,5849
5
+ mcp_proxy_adapter/main.py,sha256=ILdGeikcZls2y9Uro0bQLi53FPSuJv_yZBio-3WD2zM,9233
6
6
  mcp_proxy_adapter/openapi.py,sha256=2UZOI09ZDRJuBYBjKbMyb2U4uASszoCMD5o_4ktRpvg,13480
7
- mcp_proxy_adapter/version.py,sha256=pH0kWWmS9r3S0jad0_WC4dTh-tN3xrYetvbhd5KZyJM,74
7
+ mcp_proxy_adapter/version.py,sha256=f7P2CcobyBU9CJovfKbOnqeKTQDfipyBZBpKBXU94nM,74
8
8
  mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- mcp_proxy_adapter/api/app.py,sha256=ll9jBR7OeU-USe8XPzbULlHqP2sLmo1lEm7i-1l4N-4,35820
9
+ mcp_proxy_adapter/api/app.py,sha256=GGhA5X7HQPLJFxeaWHu5YUwi2ldPvPvJD2YcaL9Nbo0,37874
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
@@ -22,7 +22,7 @@ mcp_proxy_adapter/api/middleware/protocol_middleware.py,sha256=lFqGuT5M-USCTIVvZ
22
22
  mcp_proxy_adapter/api/middleware/transport_middleware.py,sha256=VG1rWyuh-O2pdc0kQ3SADFvyh286o5Wrnkt8OFQ0WQw,4274
23
23
  mcp_proxy_adapter/api/middleware/unified_security.py,sha256=QX4WUde03-T002Z3TgzhX0Tj2x7BFULOvOkCftsWqw8,8114
24
24
  mcp_proxy_adapter/api/middleware/user_info_middleware.py,sha256=-N6cZOc7z6FUE7xRZ8xGgI4PnMyrJq0Jzpde9VNq6Zs,11077
25
- mcp_proxy_adapter/commands/__init__.py,sha256=eStfu2UrLfMvMTY6x20GD8sMPmPB1so-0QZQYV53nqo,1565
25
+ mcp_proxy_adapter/commands/__init__.py,sha256=3BOfAiep__ftpx2hMfwj96vtDFdcVf3P3nm-vZWGohE,1700
26
26
  mcp_proxy_adapter/commands/auth_validation_command.py,sha256=p4UrAaHyoCxMy98G1BUUlFJWjoelEJzX3OAWIiQaGls,14593
27
27
  mcp_proxy_adapter/commands/base.py,sha256=0_hu8t89-2vWBPFpEMokr27A-IifKI32rkQwZfc2Grk,15162
28
28
  mcp_proxy_adapter/commands/builtin_commands.py,sha256=8kYLWIr4JvhZtqaVM9Jhqr_-ySPiy40njYUNxBUWtug,3316
@@ -42,6 +42,7 @@ mcp_proxy_adapter/commands/load_command.py,sha256=euv9KSeO2zjtQiYfnl4xhZYXARt4x1
42
42
  mcp_proxy_adapter/commands/plugins_command.py,sha256=0FazJGI9_wK_Ac_eFfmzhJGRLxMzKdpLqNMu-mwsqMI,8763
43
43
  mcp_proxy_adapter/commands/protocol_management_command.py,sha256=8Uv6WXrj_W1Sl9JCIT6hl8wo_qYuHWZYq-nBMYOQ4qw,8429
44
44
  mcp_proxy_adapter/commands/proxy_registration_command.py,sha256=owKWQRN96vpEBj-yGF-q1T_FiS9wF525bNw08NfVixs,14774
45
+ mcp_proxy_adapter/commands/registration_status_command.py,sha256=oQkgjxiGFxkuaJ_DyO19LaWj0SecfwHwSAxYI2VsStI,4399
45
46
  mcp_proxy_adapter/commands/reload_command.py,sha256=GrdmSRBrN77TaeXJak6csmSi_Wa8wwGSPzFD1NQjTKE,7508
46
47
  mcp_proxy_adapter/commands/result.py,sha256=uWHdLCwwn2_ylXLtIn-yXGiXxWRcbzMSlkgGtpkXQCg,5470
47
48
  mcp_proxy_adapter/commands/role_test_command.py,sha256=3y1pOKwrBFGpfqhQEWEBKxGkuMHa9MqHFlzaqPxM3ik,4181
@@ -54,7 +55,8 @@ mcp_proxy_adapter/commands/transport_management_command.py,sha256=HEnUyL4S014jhe
54
55
  mcp_proxy_adapter/commands/unload_command.py,sha256=6CUM9B9c-mNxw7uvt2vcvZSnxMySfoMT5UmDhzNXq38,4984
55
56
  mcp_proxy_adapter/core/__init__.py,sha256=3yt0CFZdsIG8Ln4bg-r4ISYzipm3ZUAxTn0twYTs9FI,867
56
57
  mcp_proxy_adapter/core/app_factory.py,sha256=Ywq-RN2o5B86nJpqImnaXNf_g366lVK1fXeIbIr49DM,21625
57
- mcp_proxy_adapter/core/app_runner.py,sha256=1t9p_UkWb1IvZDTD7FOCRMNSpOSgtNeHM3i7PP7x6xc,10605
58
+ mcp_proxy_adapter/core/app_runner.py,sha256=n8_rBojzKUpHLN5ksiXcR8UWoBYk6Tt5OtWk-X2kVPc,11868
59
+ mcp_proxy_adapter/core/async_proxy_registration.py,sha256=hM_ZV2YoKM8n0MakVMBd2KnYTJBh1igDeb4DYutfHnE,11387
58
60
  mcp_proxy_adapter/core/auth_validator.py,sha256=q8TNkdolvP-gM6Bvecc6nrVG9al5J31pocdwhguhTBk,19742
59
61
  mcp_proxy_adapter/core/certificate_utils.py,sha256=yeDwi-j42CxK_g-r5_ragGFY_HdSgDfTWHVUjDHF6nI,38480
60
62
  mcp_proxy_adapter/core/client.py,sha256=qIbPl8prEwK2U65kl-vGJW2_imo1E4i6HxG_VpPeWpQ,21168
@@ -67,6 +69,7 @@ mcp_proxy_adapter/core/errors.py,sha256=UNEfdmK0zPGJrWH1zUMRjHIJMcoVDcBO4w8xxKHB
67
69
  mcp_proxy_adapter/core/logging.py,sha256=gNI6vfPQC7jrUtVu6NeDsmU72JPlrRRBhtJipL1eVrI,9560
68
70
  mcp_proxy_adapter/core/mtls_asgi.py,sha256=tvk0P9024s18dcCHY9AaQIecT4ojOTv21EuQWXwooU0,5200
69
71
  mcp_proxy_adapter/core/mtls_asgi_app.py,sha256=DT_fTUH1RkvBa3ThbyCyNb-XUHyCb4DqaKA1gcZC6z4,6538
72
+ mcp_proxy_adapter/core/mtls_proxy.py,sha256=5APlWs0ImiHGEC65W_7F-PbVO3NZ2BVSj9r14AcUtTE,6011
70
73
  mcp_proxy_adapter/core/mtls_server.py,sha256=_hj6QWuExKX2LRohYvjPGFC2qTutS7ObegpEc09QijM,10117
71
74
  mcp_proxy_adapter/core/protocol_manager.py,sha256=iaXWsfm1XSfemz5QQBesMluc4cwf-LtuZVi9bm1uj28,14680
72
75
  mcp_proxy_adapter/core/proxy_client.py,sha256=CB6KBhV3vH2GU5nZ27VZ_xlNbYTAU_tnYFrkuK5He58,6094
@@ -78,6 +81,7 @@ mcp_proxy_adapter/core/security_integration.py,sha256=-5I4i9so_yMjc-zuGO-7zzIsMX
78
81
  mcp_proxy_adapter/core/server_adapter.py,sha256=jz8ztIfe82N5DE3XHRYpD6CwNcJy7ksh0l8l-towHBE,9755
79
82
  mcp_proxy_adapter/core/server_engine.py,sha256=qmxdkBv-YsQsvxVVQ-_xiAyDshxtnrKBquPJoUjo2fw,9471
80
83
  mcp_proxy_adapter/core/settings.py,sha256=D6cF4R_5gJ0XFGxzXUIzeqe-_muu6HL561TAei9wwZ0,10521
84
+ mcp_proxy_adapter/core/signal_handler.py,sha256=ryL4bLzV6ERrXPx19K4ApFGMzFI8iwlI0timj-GQ1YI,5324
81
85
  mcp_proxy_adapter/core/ssl_utils.py,sha256=Rjl79d5LdhDzxiMtaIRd9OFh0hTeRANItYFXk-7c5pA,9498
82
86
  mcp_proxy_adapter/core/transport_manager.py,sha256=eJbGa3gDVFUBFUzMK5KEmpbUDXOOShtzszUIEf7Jk0A,9292
83
87
  mcp_proxy_adapter/core/unified_config_adapter.py,sha256=zBGYdLDZ3G8f3Y9tmtm0Ne0UXIfEaNHR4Ik2W3ErkLc,22814
@@ -86,14 +90,14 @@ mcp_proxy_adapter/examples/__init__.py,sha256=k1F-EotAFbJ3JvK_rNgiH4bUztmxIWtYn0
86
90
  mcp_proxy_adapter/examples/bugfix_certificate_config.py,sha256=YGBE_SI6wYZUJLWl7-fP1OWXiSH4mHJAZHApgQWvG7s,10529
87
91
  mcp_proxy_adapter/examples/cert_manager_bugfix.py,sha256=UWUwItjqHqSnOMHocsz40_3deoZE8-vdROLW9y2fEns,7259
88
92
  mcp_proxy_adapter/examples/check_config.py,sha256=oDP3cymq76TqEpPztPihH-_sBktiEb2cG0MdVrY1Sj8,14104
89
- mcp_proxy_adapter/examples/config_builder.py,sha256=-xMrB_aF7Ag9rDT_gWOkvjZHdIr6NMrW2qTpsuylEBg,16884
93
+ mcp_proxy_adapter/examples/config_builder.py,sha256=U7nKfuNlSoJ6B8IN9QjBcvEJdpgC8I7NBJNLYYHjbrU,32298
90
94
  mcp_proxy_adapter/examples/config_cli.py,sha256=ZhVG6XEpTFe5-MzELByVsUh0AD4bHPBZeoXnGWbqifs,11059
91
95
  mcp_proxy_adapter/examples/create_test_configs.py,sha256=9TrvLa4-bWLPu0SB1JXwWuCsjj-4Vz3yAdowcHtCSSA,8228
92
96
  mcp_proxy_adapter/examples/debug_request_state.py,sha256=Z3Gy2-fWtu7KIV9OkzGDLVz7TpL_h9V_99ica40uQBU,4489
93
97
  mcp_proxy_adapter/examples/debug_role_chain.py,sha256=GLVXC2fJUwP8UJnXHchd1t-H53cjWLJI3RqTPrKmaak,8750
94
98
  mcp_proxy_adapter/examples/demo_client.py,sha256=en2Rtb70B1sQmhL-vdQ4PDpKNNl_mfll2YCFT_jFCAg,10191
95
99
  mcp_proxy_adapter/examples/generate_certificates.py,sha256=cIfTHBziGiOTy9vldAmaULD6bXBpl2a5KfB8MLIRSww,16391
96
- mcp_proxy_adapter/examples/generate_config.py,sha256=HybYtDE4qKGwWudVgTB-Dx7wTYwN-Ha_snyFokv4new,12473
100
+ mcp_proxy_adapter/examples/generate_config.py,sha256=9zImMfIM88OQz12mE5k0_RnVV5ZmhlIKO2fRldiNCok,12709
97
101
  mcp_proxy_adapter/examples/proxy_registration_example.py,sha256=vemRhftnjbiOBCJkmtDGqlWQ8syTG0a8755GCOnaQsg,12503
98
102
  mcp_proxy_adapter/examples/required_certificates.py,sha256=YW9-V78oFiZ-FmHlGP-8FQFS569VdDVyq9hfvCv31pk,7133
99
103
  mcp_proxy_adapter/examples/run_example.py,sha256=yp-a6HIrSk3ddQmbn0KkuKwErId0aNfj028TE6U-zmY,2626
@@ -130,8 +134,8 @@ mcp_proxy_adapter/schemas/base_schema.json,sha256=v9G9cGMd4dRhCZsOQ_FMqOi5VFyVbI
130
134
  mcp_proxy_adapter/schemas/openapi_schema.json,sha256=C3yLkwmDsvnLW9B5gnKKdBGl4zxkeU-rEmjTrNVsQU0,8405
131
135
  mcp_proxy_adapter/schemas/roles.json,sha256=pgf_ZyqKyXbfGUxvobpiLiSJz9zzxrMuoVWEkEpz3N8,764
132
136
  mcp_proxy_adapter/schemas/roles_schema.json,sha256=deHgI7L6GwfBXacOlNtDgDJelDThppClC3Ti4Eh8rJY,5659
133
- mcp_proxy_adapter-6.6.9.dist-info/METADATA,sha256=0KA1wwYDSxDGjOyimknzEwtygTuYTxw2dLiBVUf9oq4,8510
134
- mcp_proxy_adapter-6.6.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
135
- mcp_proxy_adapter-6.6.9.dist-info/entry_points.txt,sha256=Bf-O5Aq80n22Ayu9fI9BgidzWqwzIVaqextAddTuHZw,563
136
- mcp_proxy_adapter-6.6.9.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
137
- mcp_proxy_adapter-6.6.9.dist-info/RECORD,,
137
+ mcp_proxy_adapter-6.7.1.dist-info/METADATA,sha256=82G1E37shptreMST_9zGo9VaqSyFShYmAiOUSvI9x2o,8510
138
+ mcp_proxy_adapter-6.7.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
139
+ mcp_proxy_adapter-6.7.1.dist-info/entry_points.txt,sha256=Bf-O5Aq80n22Ayu9fI9BgidzWqwzIVaqextAddTuHZw,563
140
+ mcp_proxy_adapter-6.7.1.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
141
+ mcp_proxy_adapter-6.7.1.dist-info/RECORD,,