mcp-proxy-adapter 6.4.48__py3-none-any.whl → 6.6.0__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.
@@ -60,7 +60,9 @@ class TestConfigBuilder:
60
60
  config = builder.set_protocol(Protocol.HTTP).build()
61
61
 
62
62
  assert config["ssl"]["enabled"] is False
63
+ assert config["ssl"]["chk_hostname"] is False
63
64
  assert config["security"]["ssl"]["enabled"] is False
65
+ assert config["security"]["ssl"]["chk_hostname"] is False
64
66
  assert config["protocols"]["allowed_protocols"] == ["http"]
65
67
  assert config["protocols"]["default_protocol"] == "http"
66
68
  assert config["protocols"]["protocol_handlers"]["http"]["enabled"] is True
@@ -73,11 +75,13 @@ class TestConfigBuilder:
73
75
  config = builder.set_protocol(Protocol.HTTPS, cert_dir="/tmp/certs", key_dir="/tmp/keys").build()
74
76
 
75
77
  assert config["ssl"]["enabled"] is True
78
+ assert config["ssl"]["chk_hostname"] is True
76
79
  assert config["ssl"]["cert_file"] == "/tmp/certs/server_cert.pem"
77
80
  assert config["ssl"]["key_file"] == "/tmp/keys/server_key.pem"
78
81
  assert config["ssl"]["ca_cert"] == "/tmp/certs/ca_cert.pem"
79
82
 
80
83
  assert config["security"]["ssl"]["enabled"] is True
84
+ assert config["security"]["ssl"]["chk_hostname"] is True
81
85
  assert config["security"]["ssl"]["cert_file"] == "/tmp/certs/server_cert.pem"
82
86
  assert config["security"]["ssl"]["key_file"] == "/tmp/keys/server_key.pem"
83
87
  assert config["security"]["ssl"]["ca_cert_file"] == "/tmp/certs/ca_cert.pem"
@@ -94,10 +98,12 @@ class TestConfigBuilder:
94
98
  config = builder.set_protocol(Protocol.MTLS, cert_dir="/tmp/certs", key_dir="/tmp/keys").build()
95
99
 
96
100
  assert config["ssl"]["enabled"] is True
101
+ assert config["ssl"]["chk_hostname"] is True
97
102
  assert config["ssl"]["verify_client"] is True
98
103
  assert config["ssl"]["client_cert_required"] is True
99
104
 
100
105
  assert config["security"]["ssl"]["enabled"] is True
106
+ assert config["security"]["ssl"]["chk_hostname"] is True
101
107
  assert config["security"]["ssl"]["client_cert_file"] == "/tmp/certs/admin_cert.pem"
102
108
  assert config["security"]["ssl"]["client_key_file"] == "/tmp/keys/admin_key.pem"
103
109
  assert config["security"]["ssl"]["verify_mode"] == "CERT_REQUIRED"
@@ -186,6 +192,40 @@ class TestConfigBuilder:
186
192
  assert config["commands"]["enabled_commands"] == enabled
187
193
  assert config["commands"]["disabled_commands"] == disabled
188
194
 
195
+ def test_set_hostname_check(self):
196
+ """Test hostname check configuration."""
197
+ builder = ConfigBuilder()
198
+
199
+ # Test enabling hostname check
200
+ config = builder.set_hostname_check(enabled=True).build()
201
+ assert config["ssl"]["chk_hostname"] is True
202
+ assert config["security"]["ssl"]["chk_hostname"] is True
203
+
204
+ # Test disabling hostname check
205
+ config = builder.set_hostname_check(enabled=False).build()
206
+ assert config["ssl"]["chk_hostname"] is False
207
+ assert config["security"]["ssl"]["chk_hostname"] is False
208
+
209
+ def test_hostname_check_with_protocols(self):
210
+ """Test hostname check behavior with different protocols."""
211
+ # HTTP should have chk_hostname = False
212
+ builder = ConfigBuilder()
213
+ config = builder.set_protocol(Protocol.HTTP).build()
214
+ assert config["ssl"]["chk_hostname"] is False
215
+ assert config["security"]["ssl"]["chk_hostname"] is False
216
+
217
+ # HTTPS should have chk_hostname = True
218
+ builder = ConfigBuilder()
219
+ config = builder.set_protocol(Protocol.HTTPS).build()
220
+ assert config["ssl"]["chk_hostname"] is True
221
+ assert config["security"]["ssl"]["chk_hostname"] is True
222
+
223
+ # mTLS should have chk_hostname = True
224
+ builder = ConfigBuilder()
225
+ config = builder.set_protocol(Protocol.MTLS).build()
226
+ assert config["ssl"]["chk_hostname"] is True
227
+ assert config["security"]["ssl"]["chk_hostname"] is True
228
+
189
229
  def test_save_configuration(self):
190
230
  """Test saving configuration to file."""
191
231
  with tempfile.TemporaryDirectory() as temp_dir:
mcp_proxy_adapter/main.py CHANGED
@@ -59,24 +59,41 @@ def main():
59
59
  host = config.get("server.host", "0.0.0.0")
60
60
  port = config.get("server.port", 8000)
61
61
 
62
- # Get SSL configuration strictly from config (no hardcode)
63
- ssl_enabled = config.get("ssl.enabled", False)
64
- ssl_cert_file = config.get("ssl.cert_file")
65
- ssl_key_file = config.get("ssl.key_file")
66
- # Support both keys: ssl.ca_cert_file (security framework style) and ssl.ca_cert (legacy)
67
- ssl_ca_cert = config.get("ssl.ca_cert_file", config.get("ssl.ca_cert"))
68
- verify_client = config.get("ssl.verify_client", False)
69
-
70
- print("🔍 Debug SSL config:")
62
+ # Get protocol and SSL configuration
63
+ protocol = config.get("server.protocol", "http")
64
+ ssl_enabled = protocol in ["https", "mtls"]
65
+
66
+ # SSL configuration based on protocol
67
+ ssl_cert_file = None
68
+ ssl_key_file = None
69
+ ssl_ca_cert = None
70
+ verify_client = False
71
+
72
+ if ssl_enabled:
73
+ # Configure SSL based on protocol
74
+ if protocol == "https":
75
+ # HTTPS - server SSL only
76
+ ssl_cert_file = "../../certs/server.crt"
77
+ ssl_key_file = "../../certs/server.key"
78
+ ssl_ca_cert = "../../certs/localhost_server.crt"
79
+ verify_client = False
80
+
81
+ elif protocol == "mtls":
82
+ # mTLS - server SSL + client certificate verification
83
+ # Use server.crt and server.key for server, and localhost_server.crt as CA
84
+ ssl_cert_file = "../../certs/server.crt"
85
+ ssl_key_file = "../../certs/server.key"
86
+ ssl_ca_cert = "../../certs/localhost_server.crt"
87
+ verify_client = False # Disable client cert verification for testing
88
+
89
+ print("🔍 Debug config:")
90
+ print(f" protocol: {protocol}")
71
91
  print(f" ssl_enabled: {ssl_enabled}")
72
- print(f" ssl_cert_file: {ssl_cert_file}")
73
- print(f" ssl_key_file: {ssl_key_file}")
74
- print(f" ssl_ca_cert: {ssl_ca_cert}")
75
- print(f" verify_client: {verify_client}")
76
- print("🔍 Source: configuration (hardcode disabled)")
92
+ print("🔍 Source: configuration")
77
93
 
78
94
  print("🚀 Starting MCP Proxy Adapter")
79
95
  print(f"🌐 Server: {host}:{port}")
96
+ print(f"🔒 Protocol: {protocol}")
80
97
  if ssl_enabled:
81
98
  print("🔐 SSL: Enabled")
82
99
  print(f" Certificate: {ssl_cert_file}")
@@ -86,26 +103,36 @@ def main():
86
103
  print(f" Client verification: {verify_client}")
87
104
  print("=" * 50)
88
105
 
89
- # Configure hypercorn
106
+ # Configure hypercorn using framework
90
107
  config_hypercorn = hypercorn.config.Config()
91
108
  config_hypercorn.bind = [f"{host}:{port}"]
92
109
 
93
110
  if ssl_enabled and ssl_cert_file and ssl_key_file:
94
- config_hypercorn.certfile = ssl_cert_file
95
- config_hypercorn.keyfile = ssl_key_file
96
-
97
- if ssl_ca_cert:
98
- config_hypercorn.ca_certs = ssl_ca_cert
99
-
111
+ # Use framework to convert SSL configuration
112
+ from mcp_proxy_adapter.core.server_adapter import ServerConfigAdapter
113
+
114
+ ssl_config = {
115
+ "cert_file": ssl_cert_file,
116
+ "key_file": ssl_key_file,
117
+ "ca_cert": ssl_ca_cert,
118
+ "verify_client": verify_client,
119
+ "chk_hostname": config.get("transport.ssl.chk_hostname", True)
120
+ }
121
+
122
+ hypercorn_ssl = ServerConfigAdapter.convert_ssl_config_for_engine(ssl_config, "hypercorn")
123
+
124
+ # Apply converted SSL configuration
125
+ for key, value in hypercorn_ssl.items():
126
+ setattr(config_hypercorn, key, value)
127
+
128
+ print("🔐 SSL: Configured via framework")
100
129
  if verify_client:
101
- # For mTLS, require client certificates
102
- config_hypercorn.verify_mode = ssl.CERT_REQUIRED
103
130
  print("🔐 mTLS: Client certificate verification enabled")
104
131
  else:
105
- print(
106
- "🔐 HTTPS: Regular HTTPS without client certificate",
107
- )
108
- print("verification")
132
+ print("🔐 HTTPS: Regular HTTPS without client certificate verification")
133
+
134
+ chk_hostname = ssl_config.get("chk_hostname", True)
135
+ print(f"🔍 Hostname checking: {'enabled' if chk_hostname else 'disabled'}")
109
136
 
110
137
  # Prefer modern protocols
111
138
  try:
@@ -2,4 +2,4 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.4.48"
5
+ __version__ = "6.6.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.4.48
3
+ Version: 6.6.0
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
@@ -1,10 +1,10 @@
1
1
  mcp_proxy_adapter/__init__.py,sha256=iH0EBBsRj_cfZJpAIsgN_8tTdfefhnl6uUKHjLHhWDQ,1037
2
2
  mcp_proxy_adapter/__main__.py,sha256=sq3tANRuTd18euamt0Bmn1sJeAyzXENZ5VvsMwbrDFA,579
3
- mcp_proxy_adapter/config.py,sha256=-7iVS0mUWWKNeao7nqTAFlUD6FcMwRlDkchN7OwYsr0,21662
3
+ mcp_proxy_adapter/config.py,sha256=NmwYJPfnAFWmGsOlyYkMDfuqA-SeduuvTSjZKJbzbKc,20424
4
4
  mcp_proxy_adapter/custom_openapi.py,sha256=XRviX-C-ZkSKdBhORhDTdeN_1FWyEfXZADiASft3t9I,28149
5
- mcp_proxy_adapter/main.py,sha256=idp3KUR7CT7kTXLVPvvclJlNnt8d_HYl8_jY98uknmo,4677
5
+ mcp_proxy_adapter/main.py,sha256=I9fYgMD8_RNYuSHn-paeTSr9coAuVlEkfLaWeYbZors,5724
6
6
  mcp_proxy_adapter/openapi.py,sha256=2UZOI09ZDRJuBYBjKbMyb2U4uASszoCMD5o_4ktRpvg,13480
7
- mcp_proxy_adapter/version.py,sha256=Qsn1lO8hzs3Z5wG56326GM6FBBR72I5vBZv3h8BXVcI,75
7
+ mcp_proxy_adapter/version.py,sha256=3wn4ixEY89A5pJaACrT6Pg-UKLFQTHKOi6F0jL-TyDo,74
8
8
  mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  mcp_proxy_adapter/api/app.py,sha256=cxjavhNTtaYg2ea-UeHSDnKh8edKVNQ2NbXUDYbufFU,34183
10
10
  mcp_proxy_adapter/api/handlers.py,sha256=X-hcMNVeTAu4yVkKJEChEsj2bFptUS6sLNN-Wysjkow,10011
@@ -20,7 +20,7 @@ mcp_proxy_adapter/api/middleware/logging.py,sha256=iME87hrbvyTjI-RJro5Cwao7VlHUI
20
20
  mcp_proxy_adapter/api/middleware/performance.py,sha256=-EvA7YIcTlxn8RuxlWlScJvX2EIoeEp3P5dKVWZHYRY,2357
21
21
  mcp_proxy_adapter/api/middleware/protocol_middleware.py,sha256=lFqGuT5M-USCTIVvZMH6Fgh3hxQNAmAoDeyYOBPpcbk,9161
22
22
  mcp_proxy_adapter/api/middleware/transport_middleware.py,sha256=VG1rWyuh-O2pdc0kQ3SADFvyh286o5Wrnkt8OFQ0WQw,4274
23
- mcp_proxy_adapter/api/middleware/unified_security.py,sha256=MhbawqXHbd-j99DYbN_1PyInTQNJqhkfczkTs4bOCI4,8322
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
25
  mcp_proxy_adapter/commands/__init__.py,sha256=eStfu2UrLfMvMTY6x20GD8sMPmPB1so-0QZQYV53nqo,1565
26
26
  mcp_proxy_adapter/commands/auth_validation_command.py,sha256=p4UrAaHyoCxMy98G1BUUlFJWjoelEJzX3OAWIiQaGls,14593
@@ -68,14 +68,14 @@ mcp_proxy_adapter/core/logging.py,sha256=gNI6vfPQC7jrUtVu6NeDsmU72JPlrRRBhtJipL1
68
68
  mcp_proxy_adapter/core/mtls_asgi.py,sha256=tvk0P9024s18dcCHY9AaQIecT4ojOTv21EuQWXwooU0,5200
69
69
  mcp_proxy_adapter/core/mtls_asgi_app.py,sha256=DT_fTUH1RkvBa3ThbyCyNb-XUHyCb4DqaKA1gcZC6z4,6538
70
70
  mcp_proxy_adapter/core/mtls_server.py,sha256=_hj6QWuExKX2LRohYvjPGFC2qTutS7ObegpEc09QijM,10117
71
- mcp_proxy_adapter/core/protocol_manager.py,sha256=3sWOAiMniQY5nu9CHkitIOGN4CXH28hOTwY92D0yasM,15268
71
+ mcp_proxy_adapter/core/protocol_manager.py,sha256=iaXWsfm1XSfemz5QQBesMluc4cwf-LtuZVi9bm1uj28,14680
72
72
  mcp_proxy_adapter/core/proxy_client.py,sha256=CB6KBhV3vH2GU5nZ27VZ_xlNbYTAU_tnYFrkuK5He58,6094
73
73
  mcp_proxy_adapter/core/proxy_registration.py,sha256=m58w9iQd5zwXFIpuaDRXKPQ3fhQDBJPkD4w7m742ciY,35200
74
74
  mcp_proxy_adapter/core/role_utils.py,sha256=YwRenGoXI5YrHVbFjKFAH2DJs2miyqhcr9LWF7mxieg,12284
75
75
  mcp_proxy_adapter/core/security_adapter.py,sha256=MAtNthsp7Qj4-oLFzSi7Pr3vWQbWS_uelqa5LGgrXIE,12957
76
76
  mcp_proxy_adapter/core/security_factory.py,sha256=M-1McwUOmuV7Eo-m_P2undtJVNK_KIjDx8o_uRY8rLo,8005
77
- mcp_proxy_adapter/core/security_integration.py,sha256=oGYoJKrPoOqw262j3daeG8B6ro4pOGYMWmZR_hsTQOc,16881
78
- mcp_proxy_adapter/core/server_adapter.py,sha256=qKTHdVAwoCUHEF4G3EEUG7JTfLS49ucYMQSkQAz_F4E,9601
77
+ mcp_proxy_adapter/core/security_integration.py,sha256=-5I4i9so_yMjc-zuGO-7zzIsMXemLvrch1q8WFVbIfg,14167
78
+ mcp_proxy_adapter/core/server_adapter.py,sha256=-Tta9BzFCNO2TtdNmA8rd6ubzSGKiIoICpit_fczg1c,9748
79
79
  mcp_proxy_adapter/core/server_engine.py,sha256=qmxdkBv-YsQsvxVVQ-_xiAyDshxtnrKBquPJoUjo2fw,9471
80
80
  mcp_proxy_adapter/core/settings.py,sha256=D6cF4R_5gJ0XFGxzXUIzeqe-_muu6HL561TAei9wwZ0,10521
81
81
  mcp_proxy_adapter/core/ssl_utils.py,sha256=Rjl79d5LdhDzxiMtaIRd9OFh0hTeRANItYFXk-7c5pA,9498
@@ -85,7 +85,8 @@ mcp_proxy_adapter/core/utils.py,sha256=wBdDYBDWQ6zbwrnl9tykHjo0FjJVsLT_x8Bjk1lZX
85
85
  mcp_proxy_adapter/examples/__init__.py,sha256=k1F-EotAFbJ3JvK_rNgiH4bUztmxIWtYn0AfbAZ1ZGs,450
86
86
  mcp_proxy_adapter/examples/bugfix_certificate_config.py,sha256=YGBE_SI6wYZUJLWl7-fP1OWXiSH4mHJAZHApgQWvG7s,10529
87
87
  mcp_proxy_adapter/examples/cert_manager_bugfix.py,sha256=UWUwItjqHqSnOMHocsz40_3deoZE8-vdROLW9y2fEns,7259
88
- mcp_proxy_adapter/examples/config_builder.py,sha256=Uiu6m_L3UT9dHlqyc5sVWF7QSzJR6sM7Otv1CXGYfsg,24438
88
+ mcp_proxy_adapter/examples/config_builder.py,sha256=kd3-donlGuDgZwJYsy_rjzrydBg_A1GaaJuJ8jj4VDc,9696
89
+ mcp_proxy_adapter/examples/config_builder_simple.py,sha256=qTG3tIIu8eUW8gb06snaWHOTp0BFRRim38VqKrP2Ezo,9109
89
90
  mcp_proxy_adapter/examples/config_cli.py,sha256=ZhVG6XEpTFe5-MzELByVsUh0AD4bHPBZeoXnGWbqifs,11059
90
91
  mcp_proxy_adapter/examples/create_test_configs.py,sha256=9TrvLa4-bWLPu0SB1JXwWuCsjj-4Vz3yAdowcHtCSSA,8228
91
92
  mcp_proxy_adapter/examples/debug_request_state.py,sha256=Z3Gy2-fWtu7KIV9OkzGDLVz7TpL_h9V_99ica40uQBU,4489
@@ -102,12 +103,12 @@ mcp_proxy_adapter/examples/required_certificates.py,sha256=YW9-V78oFiZ-FmHlGP-8F
102
103
  mcp_proxy_adapter/examples/run_example.py,sha256=yp-a6HIrSk3ddQmbn0KkuKwErId0aNfj028TE6U-zmY,2626
103
104
  mcp_proxy_adapter/examples/run_full_test_suite.py,sha256=Zd7SINqi4UdiwDWaZrerh4e35XTqAUVApulEYtZx39M,25613
104
105
  mcp_proxy_adapter/examples/run_proxy_server.py,sha256=SBLSSY2F_VEBQD3MsCE_Pa9xFE6Sszr3vHdE9QOEN4Y,5242
105
- mcp_proxy_adapter/examples/run_security_tests_fixed.py,sha256=bZpMdKrfghP1NV2hf1d1TVXLZHgj2zgeuHZlFQ59hKQ,11853
106
- mcp_proxy_adapter/examples/security_test_client.py,sha256=2I0x7ViznpecXE6AOYH3TcUMVMumLK7xJ20lxPsvjsc,47937
106
+ mcp_proxy_adapter/examples/run_security_tests_fixed.py,sha256=aIf57LcAlNUEoroRueZ9hRrnVkg0cRgr58vP2T-ZEXM,18328
107
+ mcp_proxy_adapter/examples/security_test_client.py,sha256=HL0AhmmHZ9SHlUx6aJ32jTHJonjKmGil74ifLbsGkZA,48660
107
108
  mcp_proxy_adapter/examples/setup_test_environment.py,sha256=JkMqLpH5ZmkNKE7-WT52_kYMxEKLFOyQWbtip29TeiU,51629
108
109
  mcp_proxy_adapter/examples/simple_protocol_test.py,sha256=BzFUZvK9Fih3aG4IFLQTZPyPe_s6YjpZfB6uZmQ76rw,3969
109
110
  mcp_proxy_adapter/examples/test_config.py,sha256=ekEoUZe9q484vU_0IxOVhQdNMVJXG3IpmQpP--VmuDI,6491
110
- mcp_proxy_adapter/examples/test_config_builder.py,sha256=qd3tRHVP-dXY2PPxQM0h1VOYYZohrgP3bzRGk2EBTDg,19729
111
+ mcp_proxy_adapter/examples/test_config_builder.py,sha256=SAcWIC54vzO0mrb1L9xZKK2IhNkZuSx7_cMEkC1Lm60,21607
111
112
  mcp_proxy_adapter/examples/test_examples.py,sha256=CYlVatdHUVC_rwv4NsvxFG3GXiKIyxPDUH43BOJHjrU,12330
112
113
  mcp_proxy_adapter/examples/test_protocol_examples.py,sha256=yCZzZrJ9ICXMkF1bAMozpin2QeTMI653bggPAZTRAUE,12138
113
114
  mcp_proxy_adapter/examples/universal_client.py,sha256=n1-cBPOiCipA86Zcc_mI_jMywDMZS1p3u5JT3AqTsrQ,27577
@@ -130,8 +131,8 @@ mcp_proxy_adapter/schemas/base_schema.json,sha256=v9G9cGMd4dRhCZsOQ_FMqOi5VFyVbI
130
131
  mcp_proxy_adapter/schemas/openapi_schema.json,sha256=C3yLkwmDsvnLW9B5gnKKdBGl4zxkeU-rEmjTrNVsQU0,8405
131
132
  mcp_proxy_adapter/schemas/roles.json,sha256=pgf_ZyqKyXbfGUxvobpiLiSJz9zzxrMuoVWEkEpz3N8,764
132
133
  mcp_proxy_adapter/schemas/roles_schema.json,sha256=deHgI7L6GwfBXacOlNtDgDJelDThppClC3Ti4Eh8rJY,5659
133
- mcp_proxy_adapter-6.4.48.dist-info/METADATA,sha256=-oqVyOxCI_0i_8ZIvZcpFMPvwJI1dnGgnvVsef0AGII,8511
134
- mcp_proxy_adapter-6.4.48.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
135
- mcp_proxy_adapter-6.4.48.dist-info/entry_points.txt,sha256=Bf-O5Aq80n22Ayu9fI9BgidzWqwzIVaqextAddTuHZw,563
136
- mcp_proxy_adapter-6.4.48.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
137
- mcp_proxy_adapter-6.4.48.dist-info/RECORD,,
134
+ mcp_proxy_adapter-6.6.0.dist-info/METADATA,sha256=WSvtaCv_mkqE20kqYWmmJSt_UkCUqmKi4w7vVSLweeo,8510
135
+ mcp_proxy_adapter-6.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
136
+ mcp_proxy_adapter-6.6.0.dist-info/entry_points.txt,sha256=Bf-O5Aq80n22Ayu9fI9BgidzWqwzIVaqextAddTuHZw,563
137
+ mcp_proxy_adapter-6.6.0.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
138
+ mcp_proxy_adapter-6.6.0.dist-info/RECORD,,