mcp-proxy-adapter 6.2.23__py3-none-any.whl → 6.2.25__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.
Files changed (33) hide show
  1. mcp_proxy_adapter/api/app.py +0 -3
  2. mcp_proxy_adapter/api/middleware/protocol_middleware.py +10 -10
  3. mcp_proxy_adapter/commands/health_command.py +1 -1
  4. mcp_proxy_adapter/config.py +16 -4
  5. mcp_proxy_adapter/core/protocol_manager.py +9 -9
  6. mcp_proxy_adapter/examples/create_certificates_simple.py +7 -17
  7. mcp_proxy_adapter/examples/examples/basic_framework/__init__.py +9 -0
  8. mcp_proxy_adapter/examples/examples/basic_framework/commands/__init__.py +4 -0
  9. mcp_proxy_adapter/examples/examples/basic_framework/hooks/__init__.py +4 -0
  10. mcp_proxy_adapter/examples/examples/basic_framework/main.py +44 -0
  11. mcp_proxy_adapter/examples/examples/full_application/__init__.py +12 -0
  12. mcp_proxy_adapter/examples/examples/full_application/commands/__init__.py +7 -0
  13. mcp_proxy_adapter/examples/examples/full_application/commands/custom_echo_command.py +80 -0
  14. mcp_proxy_adapter/examples/examples/full_application/commands/dynamic_calculator_command.py +90 -0
  15. mcp_proxy_adapter/examples/examples/full_application/hooks/__init__.py +7 -0
  16. mcp_proxy_adapter/examples/examples/full_application/hooks/application_hooks.py +75 -0
  17. mcp_proxy_adapter/examples/examples/full_application/hooks/builtin_command_hooks.py +71 -0
  18. mcp_proxy_adapter/examples/examples/full_application/main.py +173 -0
  19. mcp_proxy_adapter/examples/examples/full_application/proxy_endpoints.py +154 -0
  20. mcp_proxy_adapter/examples/generate_test_configs.py +70 -33
  21. mcp_proxy_adapter/examples/run_full_test_suite.py +302 -109
  22. mcp_proxy_adapter/examples/run_security_tests.py +14 -5
  23. mcp_proxy_adapter/examples/scripts/config_generator.py +740 -0
  24. mcp_proxy_adapter/examples/scripts/create_certificates_simple.py +560 -0
  25. mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py +369 -0
  26. mcp_proxy_adapter/main.py +0 -2
  27. mcp_proxy_adapter/version.py +1 -1
  28. {mcp_proxy_adapter-6.2.23.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/METADATA +1 -1
  29. {mcp_proxy_adapter-6.2.23.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/RECORD +33 -17
  30. {mcp_proxy_adapter-6.2.23.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/WHEEL +0 -0
  31. {mcp_proxy_adapter-6.2.23.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/entry_points.txt +0 -0
  32. {mcp_proxy_adapter-6.2.23.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/licenses/LICENSE +0 -0
  33. {mcp_proxy_adapter-6.2.23.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,369 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Author: Vasiliy Zdanovskiy
4
+ email: vasilyvz@gmail.com
5
+ Script for generating certificates and tokens for MCP Proxy Adapter configurations.
6
+ Generates all necessary certificates, keys, and tokens based on configuration requirements.
7
+ Uses mcp_security_framework for certificate generation.
8
+ """
9
+ import json
10
+ import os
11
+ import sys
12
+ import argparse
13
+ import subprocess
14
+ from pathlib import Path
15
+ from typing import Dict, Any, List, Optional
16
+ # Import mcp_security_framework
17
+ try:
18
+ from mcp_security_framework.core.cert_manager import CertificateManager
19
+ from mcp_security_framework.schemas.config import CertificateConfig, CAConfig, ServerCertConfig, ClientCertConfig
20
+ from mcp_security_framework.schemas.models import CertificateType
21
+ SECURITY_FRAMEWORK_AVAILABLE = True
22
+ except ImportError:
23
+ SECURITY_FRAMEWORK_AVAILABLE = False
24
+ print("Warning: mcp_security_framework not available, falling back to OpenSSL")
25
+ def generate_ca_certificate(output_dir: str) -> str:
26
+ """
27
+ Generate CA certificate and key using mcp_security_framework.
28
+ Args:
29
+ output_dir: Output directory for certificates
30
+ Returns:
31
+ Path to CA certificate file
32
+ """
33
+ ca_dir = os.path.join(output_dir, "certs")
34
+ os.makedirs(ca_dir, exist_ok=True)
35
+ if SECURITY_FRAMEWORK_AVAILABLE:
36
+ try:
37
+ # Configure CA certificate
38
+ ca_config = CAConfig(
39
+ common_name="MCP Proxy Adapter CA",
40
+ organization="MCP Proxy Adapter",
41
+ organizational_unit="Certificate Authority",
42
+ country="US",
43
+ state="State",
44
+ locality="City",
45
+ validity_years=10, # Используем validity_years вместо validity_days
46
+ key_size=2048,
47
+ hash_algorithm="sha256"
48
+ )
49
+ # Create certificate manager
50
+ cert_config = CertificateConfig(
51
+ cert_storage_path=ca_dir,
52
+ key_storage_path=ca_dir,
53
+ default_validity_days=3650,
54
+ key_size=2048,
55
+ hash_algorithm="sha256"
56
+ )
57
+ cert_manager = CertificateManager(cert_config)
58
+ # Create CA certificate
59
+ cert_pair = cert_manager.create_root_ca(ca_config)
60
+ if cert_pair and cert_pair.certificate_path:
61
+ print(f"✅ Generated CA certificate using mcp_security_framework")
62
+ return cert_pair.certificate_path
63
+ else:
64
+ print(f"❌ Failed to create CA certificate: Invalid certificate pair")
65
+ return None
66
+ except Exception as e:
67
+ print(f"❌ Error creating CA certificate with framework: {e}")
68
+ return None
69
+ else:
70
+ # Fallback to OpenSSL
71
+ ca_key = os.path.join(ca_dir, "ca.key")
72
+ ca_cert = os.path.join(ca_dir, "ca.crt")
73
+ # Generate CA private key
74
+ subprocess.run([
75
+ "openssl", "genrsa", "-out", ca_key, "2048"
76
+ ], check=True, capture_output=True)
77
+ # Generate CA certificate
78
+ subprocess.run([
79
+ "openssl", "req", "-new", "-x509", "-days", "365", "-key", ca_key,
80
+ "-out", ca_cert, "-subj", "/C=US/ST=State/L=City/O=Organization/CN=CA"
81
+ ], check=True, capture_output=True)
82
+ print(f"✅ Generated CA certificate using OpenSSL: {ca_cert}")
83
+ return ca_cert
84
+ def generate_server_certificate(output_dir: str, ca_cert: str) -> tuple[str, str]:
85
+ """
86
+ Generate server certificate and key using mcp_security_framework.
87
+ Args:
88
+ output_dir: Output directory for certificates
89
+ ca_cert: Path to CA certificate
90
+ Returns:
91
+ Tuple of (certificate_path, key_path)
92
+ """
93
+ certs_dir = os.path.join(output_dir, "certs")
94
+ keys_dir = os.path.join(output_dir, "keys")
95
+ os.makedirs(certs_dir, exist_ok=True)
96
+ os.makedirs(keys_dir, exist_ok=True)
97
+ if SECURITY_FRAMEWORK_AVAILABLE:
98
+ try:
99
+ # Find CA key file
100
+ ca_key = None
101
+ if ca_cert.endswith('.crt'):
102
+ ca_key = ca_cert.replace('.crt', '.key')
103
+ elif ca_cert.endswith('.pem'):
104
+ ca_key = ca_cert.replace('.pem', '_key.pem')
105
+ if not os.path.exists(ca_key):
106
+ print(f"❌ CA key file not found: {ca_key}")
107
+ return None, None
108
+ # Configure server certificate
109
+ server_config = ServerCertConfig(
110
+ common_name="localhost",
111
+ organization="MCP Proxy Adapter",
112
+ organizational_unit="Server",
113
+ country="US",
114
+ state="State",
115
+ locality="City",
116
+ validity_days=365,
117
+ key_size=2048,
118
+ hash_algorithm="sha256",
119
+ subject_alt_names=["localhost", "127.0.0.1"], # Используем subject_alt_names вместо san_dns
120
+ ca_cert_path=ca_cert,
121
+ ca_key_path=ca_key
122
+ )
123
+ # Create certificate manager
124
+ cert_config = CertificateConfig(
125
+ cert_storage_path=certs_dir,
126
+ key_storage_path=keys_dir,
127
+ default_validity_days=365,
128
+ key_size=2048,
129
+ hash_algorithm="sha256"
130
+ )
131
+ cert_manager = CertificateManager(cert_config)
132
+ # Create server certificate
133
+ cert_pair = cert_manager.create_server_certificate(server_config)
134
+ if cert_pair and cert_pair.certificate_path and cert_pair.private_key_path:
135
+ print(f"✅ Generated server certificate using mcp_security_framework")
136
+ return (cert_pair.certificate_path, cert_pair.private_key_path)
137
+ else:
138
+ print(f"❌ Failed to create server certificate: Invalid certificate pair")
139
+ return None, None
140
+ except Exception as e:
141
+ print(f"❌ Error creating server certificate with framework: {e}")
142
+ return None, None
143
+ else:
144
+ # Fallback to OpenSSL
145
+ ca_key = ca_cert.replace(".crt", ".key")
146
+ server_key = os.path.join(keys_dir, "server.key")
147
+ server_csr = os.path.join(certs_dir, "server.csr")
148
+ server_cert = os.path.join(certs_dir, "server.crt")
149
+ # Generate server private key
150
+ subprocess.run([
151
+ "openssl", "genrsa", "-out", server_key, "2048"
152
+ ], check=True, capture_output=True)
153
+ # Generate server certificate signing request
154
+ subprocess.run([
155
+ "openssl", "req", "-new", "-key", server_key, "-out", server_csr,
156
+ "-subj", "/C=US/ST=State/L=City/O=Organization/CN=localhost"
157
+ ], check=True, capture_output=True)
158
+ # Sign server certificate with CA
159
+ subprocess.run([
160
+ "openssl", "x509", "-req", "-in", server_csr, "-CA", ca_cert,
161
+ "-CAkey", ca_key, "-CAcreateserial", "-out", server_cert, "-days", "365"
162
+ ], check=True, capture_output=True)
163
+ # Clean up CSR
164
+ os.remove(server_csr)
165
+ print(f"✅ Generated server certificate using OpenSSL: {server_cert}")
166
+ return server_cert, server_key
167
+ def generate_client_certificate(output_dir: str, ca_cert: str, client_name: str = "client",
168
+ roles: List[str] = None, permissions: List[str] = None) -> tuple[str, str]:
169
+ """
170
+ Generate client certificate and key using mcp_security_framework.
171
+ Args:
172
+ output_dir: Output directory for certificates
173
+ ca_cert: Path to CA certificate
174
+ client_name: Name of the client
175
+ roles: List of roles for the client
176
+ permissions: List of permissions for the client
177
+ Returns:
178
+ Tuple of (certificate_path, key_path)
179
+ """
180
+ certs_dir = os.path.join(output_dir, "certs")
181
+ keys_dir = os.path.join(output_dir, "keys")
182
+ os.makedirs(certs_dir, exist_ok=True)
183
+ os.makedirs(keys_dir, exist_ok=True)
184
+ if SECURITY_FRAMEWORK_AVAILABLE:
185
+ try:
186
+ # Find CA key file
187
+ ca_key = None
188
+ if ca_cert.endswith('.crt'):
189
+ ca_key = ca_cert.replace('.crt', '.key')
190
+ elif ca_cert.endswith('.pem'):
191
+ ca_key = ca_cert.replace('.pem', '_key.pem')
192
+ if not os.path.exists(ca_key):
193
+ print(f"❌ CA key file not found: {ca_key}")
194
+ return None, None
195
+ # Configure client certificate
196
+ client_config = ClientCertConfig(
197
+ common_name=f"{client_name}-client",
198
+ organization="MCP Proxy Adapter",
199
+ organizational_unit="Client",
200
+ country="US",
201
+ state="State",
202
+ locality="City",
203
+ validity_days=730,
204
+ key_size=2048,
205
+ hash_algorithm="sha256",
206
+ roles=roles or [],
207
+ permissions=permissions or [],
208
+ ca_cert_path=ca_cert,
209
+ ca_key_path=ca_key
210
+ )
211
+ # Create certificate manager
212
+ cert_config = CertificateConfig(
213
+ cert_storage_path=certs_dir,
214
+ key_storage_path=keys_dir,
215
+ default_validity_days=730,
216
+ key_size=2048,
217
+ hash_algorithm="sha256"
218
+ )
219
+ cert_manager = CertificateManager(cert_config)
220
+ # Create client certificate
221
+ cert_pair = cert_manager.create_client_certificate(client_config)
222
+ if cert_pair and cert_pair.certificate_path and cert_pair.private_key_path:
223
+ print(f"✅ Generated client certificate {client_name} using mcp_security_framework")
224
+ return (cert_pair.certificate_path, cert_pair.private_key_path)
225
+ else:
226
+ print(f"❌ Failed to create client certificate {client_name}: Invalid certificate pair")
227
+ return None, None
228
+ except Exception as e:
229
+ print(f"❌ Error creating client certificate {client_name} with framework: {e}")
230
+ return None, None
231
+ else:
232
+ # Fallback to OpenSSL
233
+ ca_key = ca_cert.replace(".crt", ".key")
234
+ client_key = os.path.join(keys_dir, f"{client_name}.key")
235
+ client_csr = os.path.join(certs_dir, f"{client_name}.csr")
236
+ client_cert = os.path.join(certs_dir, f"{client_name}.crt")
237
+ # Generate client private key
238
+ subprocess.run([
239
+ "openssl", "genrsa", "-out", client_key, "2048"
240
+ ], check=True, capture_output=True)
241
+ # Generate client certificate signing request
242
+ subprocess.run([
243
+ "openssl", "req", "-new", "-key", client_key, "-out", client_csr,
244
+ "-subj", f"/C=US/ST=State/L=City/O=Organization/CN={client_name}-client"
245
+ ], check=True, capture_output=True)
246
+ # Sign client certificate with CA
247
+ subprocess.run([
248
+ "openssl", "x509", "-req", "-in", client_csr, "-CA", ca_cert,
249
+ "-CAkey", ca_key, "-CAcreateserial", "-out", client_cert, "-days", "730"
250
+ ], check=True, capture_output=True)
251
+ # Clean up CSR
252
+ os.remove(client_csr)
253
+ print(f"✅ Generated client certificate {client_name} using OpenSSL: {client_cert}")
254
+ return client_cert, client_key
255
+ def generate_tokens(output_dir: str) -> Dict[str, str]:
256
+ """
257
+ Generate API tokens for different roles.
258
+ Args:
259
+ output_dir: Output directory for tokens
260
+ Returns:
261
+ Dictionary of role -> token mappings
262
+ """
263
+ tokens_dir = os.path.join(output_dir, "tokens")
264
+ os.makedirs(tokens_dir, exist_ok=True)
265
+ tokens = {
266
+ "admin": "test-token-123",
267
+ "user": "user-token-456",
268
+ "readonly": "readonly-token-123",
269
+ "guest": "guest-token-123",
270
+ "proxy": "proxy-token-123"
271
+ }
272
+ # Save tokens to file
273
+ tokens_file = os.path.join(tokens_dir, "tokens.json")
274
+ with open(tokens_file, 'w') as f:
275
+ json.dump(tokens, f, indent=2)
276
+ print(f"✅ Generated tokens: {tokens_file}")
277
+ return tokens
278
+ def generate_roles_config(output_dir: str) -> Dict[str, Any]:
279
+ """
280
+ Generate roles configuration file.
281
+ Args:
282
+ output_dir: Output directory for configs
283
+ Returns:
284
+ Roles configuration dictionary
285
+ """
286
+ roles_config = {
287
+ "admin": {
288
+ "permissions": ["read", "write", "execute", "delete", "admin", "register", "unregister", "heartbeat", "discover"],
289
+ "tokens": []
290
+ },
291
+ "user": {
292
+ "permissions": ["read", "execute", "register", "unregister", "heartbeat", "discover"],
293
+ "tokens": []
294
+ },
295
+ "readonly": {
296
+ "permissions": ["read", "discover"],
297
+ "tokens": []
298
+ },
299
+ "guest": {
300
+ "permissions": ["read", "discover"],
301
+ "tokens": []
302
+ },
303
+ "proxy": {
304
+ "permissions": ["register", "unregister", "heartbeat", "discover"],
305
+ "tokens": []
306
+ }
307
+ }
308
+ # Save roles config to file
309
+ roles_file = os.path.join(output_dir, "roles.json")
310
+ with open(roles_file, 'w') as f:
311
+ json.dump(roles_config, f, indent=2)
312
+ print(f"✅ Generated roles configuration: {roles_file}")
313
+ return roles_config
314
+ def main():
315
+ """Main function for certificate and token generation."""
316
+ parser = argparse.ArgumentParser(description="Generate certificates and tokens")
317
+ parser.add_argument("--output-dir", "-o", default="./certs", help="Output directory")
318
+ parser.add_argument("--framework", action="store_true", help="Use mcp_security_framework")
319
+ args = parser.parse_args()
320
+ print("🔐 Certificate and Token Generation Script")
321
+ print("=" * 50)
322
+ if args.framework and not SECURITY_FRAMEWORK_AVAILABLE:
323
+ print("❌ mcp_security_framework not available")
324
+ return 1
325
+ # Create output directory
326
+ os.makedirs(args.output_dir, exist_ok=True)
327
+ try:
328
+ # 1. Generate CA certificate
329
+ print("\n🔧 Generating CA certificate...")
330
+ ca_cert = generate_ca_certificate(args.output_dir)
331
+ if not ca_cert:
332
+ print("❌ Failed to generate CA certificate")
333
+ return 1
334
+ # 2. Generate server certificate
335
+ print("\n🔧 Generating server certificate...")
336
+ server_cert, server_key = generate_server_certificate(args.output_dir, ca_cert)
337
+ if not server_cert or not server_key:
338
+ print("❌ Failed to generate server certificate")
339
+ return 1
340
+ # 3. Generate client certificates
341
+ print("\n🔧 Generating client certificates...")
342
+ client_configs = [
343
+ ("admin", ["admin"], ["read", "write", "execute", "delete", "admin", "register", "unregister", "heartbeat", "discover"]),
344
+ ("user", ["user"], ["read", "execute", "register", "unregister", "heartbeat", "discover"]),
345
+ ("readonly", ["readonly"], ["read", "discover"]),
346
+ ("guest", ["guest"], ["read", "discover"]),
347
+ ("proxy", ["proxy"], ["register", "unregister", "heartbeat", "discover"])
348
+ ]
349
+ for client_name, roles, permissions in client_configs:
350
+ client_cert, client_key = generate_client_certificate(
351
+ args.output_dir, ca_cert, client_name, roles, permissions
352
+ )
353
+ if not client_cert or not client_key:
354
+ print(f"❌ Failed to generate client certificate {client_name}")
355
+ return 1
356
+ # 4. Generate tokens
357
+ print("\n🔧 Generating tokens...")
358
+ tokens = generate_tokens(args.output_dir)
359
+ # 5. Generate roles configuration
360
+ print("\n🔧 Generating roles configuration...")
361
+ roles_config = generate_roles_config(args.output_dir)
362
+ print("\n🎉 All certificates and tokens generated successfully!")
363
+ print(f"📁 Output directory: {args.output_dir}")
364
+ return 0
365
+ except Exception as e:
366
+ print(f"❌ Error during generation: {e}")
367
+ return 1
368
+ if __name__ == "__main__":
369
+ exit(main())
mcp_proxy_adapter/main.py CHANGED
@@ -34,8 +34,6 @@ def main():
34
34
  else:
35
35
  config = Config()
36
36
 
37
- print(f"DEBUG main.py: config type: {type(config)}")
38
- print(f"DEBUG main.py: config.get_all() type: {type(config.get_all())}")
39
37
 
40
38
  # Create application
41
39
  app = create_app(app_config=config)
@@ -2,5 +2,5 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.2.23"
5
+ __version__ = "6.2.24"
6
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.2.23
3
+ Version: 6.2.25
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,12 +1,12 @@
1
1
  mcp_proxy_adapter/__init__.py,sha256=B7m1YWyv_Wb87-Q-JqVpHQgwajnfIgDyZ_iIxzdTbBY,1021
2
2
  mcp_proxy_adapter/__main__.py,sha256=-Wp1myP9DzJNB9j97mj62C8kFk5YUbCmd0e7Rnwte0A,769
3
- mcp_proxy_adapter/config.py,sha256=syjTmiWh66rXcmgK6X2KSzbUkwTQC2W5FfMUpO5bjmo,12866
3
+ mcp_proxy_adapter/config.py,sha256=MgomeGL3XBO0tYOA6VIIP1hizUuTYpF9Bs2tp3cesMY,13333
4
4
  mcp_proxy_adapter/custom_openapi.py,sha256=jYUrCy8C1mShh3sjKj-JkzSMLAvxDLTvtzSJFj5HUNg,15023
5
- mcp_proxy_adapter/main.py,sha256=cm67W6RU-rL1-zEcTLz_yT7AyoZeqhMbQ4_2qMHlueE,2975
5
+ mcp_proxy_adapter/main.py,sha256=9qt_pEQdq8roUc73CumfDn6jDWP_NyfdE1lCGEynv5I,2841
6
6
  mcp_proxy_adapter/openapi.py,sha256=36vOEbJjGnVZR6hUhl6mHCD29HYOEFKo2bL0JdGSm-4,13952
7
- mcp_proxy_adapter/version.py,sha256=cmdFAb5y49RrvFwJN1h125k9acpNWpgNHiIP-UyOdVA,76
7
+ mcp_proxy_adapter/version.py,sha256=he5ZytTjuzxFCrKQ9AxOJw6hhMuKvgK4oyLQ4ErooZQ,76
8
8
  mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- mcp_proxy_adapter/api/app.py,sha256=g0zHST8xY7xTjMxkCIJEFPck5lD5LyhNzO1hM4S9FhU,29136
9
+ mcp_proxy_adapter/api/app.py,sha256=khl4kaI4mJ6dNbfAK7hR97Ek-eWC9NBeuXHr6GVbLoU,28911
10
10
  mcp_proxy_adapter/api/handlers.py,sha256=DcZT7MVBV33q-0EJ0iFqxE0VgBkFt6d_SqoRkntwyvc,8477
11
11
  mcp_proxy_adapter/api/schemas.py,sha256=xOmiSwHaapY6myEFnLu7o-LWVPM7vwmLYZXFo2c6NfE,12381
12
12
  mcp_proxy_adapter/api/tool_integration.py,sha256=MrtX7vUXCGBBuZuOs3C6EF67R_U_0xMfOmlmsAz-wuE,10245
@@ -18,7 +18,7 @@ mcp_proxy_adapter/api/middleware/error_handling.py,sha256=avIZTjXj1sNOT3ekKtLAYJ
18
18
  mcp_proxy_adapter/api/middleware/factory.py,sha256=yDo7f4E-YL7qQZgGApyk8HZfLYOnrpsNx-Eh3fJBikE,8404
19
19
  mcp_proxy_adapter/api/middleware/logging.py,sha256=VvUUX7bN4davCzFO6GYbN1O4sgJjOspV-EBLE3xpwpc,4730
20
20
  mcp_proxy_adapter/api/middleware/performance.py,sha256=dHBxTF43LEGXMKHMH3A8ybKmwAWURd_zswqq_oC4xbw,2454
21
- mcp_proxy_adapter/api/middleware/protocol_middleware.py,sha256=puj_kHrPGBxJNTrAE_uKjzejj_7U-Vu_X442v5_vyUY,8105
21
+ mcp_proxy_adapter/api/middleware/protocol_middleware.py,sha256=iVjJrTEfKy15ZchQUo-Mu0hBg9kEP6vgzee_3PtWd6M,8115
22
22
  mcp_proxy_adapter/api/middleware/transport_middleware.py,sha256=Esy2gGKpEV5RoUTilr1YKKTDc5jh5RxsomD0VXyR2pE,4396
23
23
  mcp_proxy_adapter/api/middleware/unified_security.py,sha256=fDWUeIuHjYUngVnB8gVR9ES3IQSaY9VP2YPZGXATJlU,7617
24
24
  mcp_proxy_adapter/api/middleware/user_info_middleware.py,sha256=CWZvwUqieNhC8_ArTvncRjFfU3RHusO-dMcUSvRv01A,6311
@@ -34,7 +34,7 @@ mcp_proxy_adapter/commands/config_command.py,sha256=-Z6BGaEQTf859l56zZpHYBeZFeIV
34
34
  mcp_proxy_adapter/commands/dependency_container.py,sha256=Uz9OPRAUZN7tsVrMVgXgPQcsRD2N-e2Ixg9XarPOlnY,3410
35
35
  mcp_proxy_adapter/commands/dependency_manager.py,sha256=lmY79MBkh-JRIPsYxSkdrUE9XHi4XBCbucaEMT0w6do,7683
36
36
  mcp_proxy_adapter/commands/echo_command.py,sha256=R1oDNEAJSOIuODa4Nk3z4WJXhSxniNzaZtYHADlV310,2390
37
- mcp_proxy_adapter/commands/health_command.py,sha256=uo6iND710oSUHEZm6ueT0TsKXRJKFbxUiVeSK57SBlE,4575
37
+ mcp_proxy_adapter/commands/health_command.py,sha256=cNUfvQI4MAJQK1wKfzv_snCCK-FkL-FulVSErkMA3qw,4585
38
38
  mcp_proxy_adapter/commands/help_command.py,sha256=PuanwvYmVs64DhB71gaI5rBRi_ozJ6x8afr18bRpTk4,13482
39
39
  mcp_proxy_adapter/commands/hooks.py,sha256=Gu5TDSgA9EBHexWMWze8wgT63i6-dMEEwG8edWbrX3U,10060
40
40
  mcp_proxy_adapter/commands/key_management_command.py,sha256=qin-iYXksIXOkZEfmJpclJSOyKaz9qRinj9uVa8hkdk,19339
@@ -66,7 +66,7 @@ mcp_proxy_adapter/core/errors.py,sha256=s34OxiIR4NCJu_pYSigKXqrIvRjUUK2OWw0X4dpD
66
66
  mcp_proxy_adapter/core/logging.py,sha256=jQlFz52Xwapef6UD4p0acmaGFumD9XuexwW4frDN_ZM,9626
67
67
  mcp_proxy_adapter/core/mtls_asgi.py,sha256=X2lAj3wk3L85amRCp_-10sqvZa5wJf_diXhwrrQReSo,5311
68
68
  mcp_proxy_adapter/core/mtls_asgi_app.py,sha256=VeolP08TTaqYU5fGeaZexj6EBWBDugoVrEGXzJW4PuM,6406
69
- mcp_proxy_adapter/core/protocol_manager.py,sha256=0PwEnBmoUXKXhwOTqfh3UO2s5TgdexTXZcElEyKeRe8,14754
69
+ mcp_proxy_adapter/core/protocol_manager.py,sha256=ISFRXjUuK4Q3uMbVB8-O_ozQSsDEH0PQA_HAKGeUrrw,14763
70
70
  mcp_proxy_adapter/core/proxy_client.py,sha256=shP373Yelz7Fja22U6XnH0kT9XtPtWEFwOFlYFO97gw,22511
71
71
  mcp_proxy_adapter/core/proxy_registration.py,sha256=87ko1vw61nHJGo0-xrObXiyQhrYK2K6nKr8rXID-j8c,19424
72
72
  mcp_proxy_adapter/core/role_utils.py,sha256=wMoTVz3gF5fM7jozNMwsEwPkp1tui26M-t_KH1Oz8gs,12880
@@ -81,19 +81,19 @@ mcp_proxy_adapter/core/transport_manager.py,sha256=ppcgjO-7Ulrk1ovlzlXVM89Iw4VOG
81
81
  mcp_proxy_adapter/core/unified_config_adapter.py,sha256=cpN_VrliIFGDH3JsfRkTlFdQvLcmuMYYedq0QEzlb0Y,22857
82
82
  mcp_proxy_adapter/core/utils.py,sha256=ly8Ttg2v1OBukThJLxudRvmttU1hxJFLJUfat4b2dOI,3268
83
83
  mcp_proxy_adapter/examples/__init__.py,sha256=k1F-EotAFbJ3JvK_rNgiH4bUztmxIWtYn0AfbAZ1ZGs,450
84
- mcp_proxy_adapter/examples/create_certificates_simple.py,sha256=xkIvUYl6hbKlWImQmenG0k_CvIsOsc9ZHICiKY3rtI8,26380
84
+ mcp_proxy_adapter/examples/create_certificates_simple.py,sha256=KhP-J98e3GRfEsueEtPlACyOVNWVVxRwBZWBMged_YA,25743
85
85
  mcp_proxy_adapter/examples/debug_request_state.py,sha256=x_H3NIlkmIS6lZimvEM6kCXxGdpgFw99Sdui8qa_qeU,4347
86
86
  mcp_proxy_adapter/examples/debug_role_chain.py,sha256=33l2Tk5mrcnwPFwqm2NTHcrWaJrXUU2wxW2I6Y4uIg4,8344
87
87
  mcp_proxy_adapter/examples/demo_client.py,sha256=inic-FP5qG8oQXUaCrtEhmhac_PDZ1pcxp-M1cxSzwA,10240
88
88
  mcp_proxy_adapter/examples/generate_all_certificates.py,sha256=rgcwqIkQ1eDfEIRFRXGIOz-jOSS1w0GPBRhYvMl6Vjc,16948
89
89
  mcp_proxy_adapter/examples/generate_certificates.py,sha256=A34OHUEiFvINOHrm3_JiDSbp-WG-eQXIvKCsE8JAeXQ,6616
90
90
  mcp_proxy_adapter/examples/generate_certificates_and_tokens.py,sha256=J0qHm_BMY8RYqfuwf7V7xKsHcsRJx8E7x-8JxmW5sPw,15988
91
- mcp_proxy_adapter/examples/generate_test_configs.py,sha256=EnwhtadwcAWs3dtkVSWUG2Xhw7VHb9i0WQbVCvxGR14,12035
91
+ mcp_proxy_adapter/examples/generate_test_configs.py,sha256=NLhPrA9AfPlQ0WCbOJ1B_V9OC445tanKTmq7aAWKULU,13672
92
92
  mcp_proxy_adapter/examples/proxy_registration_example.py,sha256=g59_QG2D1CCqhIXEvgy2XmgXI3toLmLyH7hL3uHZwC8,12647
93
93
  mcp_proxy_adapter/examples/run_example.py,sha256=o8rcy9Xo0UuZG4MpKdex3pFWYdtAi6uW8dEBQE6Yzbw,2539
94
- mcp_proxy_adapter/examples/run_full_test_suite.py,sha256=hREBb4vzT3dWEU0G5rh6XSMykmQ5xeIxb-01i4BMEQQ,3815
94
+ mcp_proxy_adapter/examples/run_full_test_suite.py,sha256=7Z6qDOvbndGPue1P9v-GcYZxy_XPqoC9voJ7tR8eKQ8,12428
95
95
  mcp_proxy_adapter/examples/run_proxy_server.py,sha256=vkEjqREcOSw2elH_VOBLa0cFjL8gCZp9nkRa8YLsndI,5119
96
- mcp_proxy_adapter/examples/run_security_tests.py,sha256=wxt3gbcJbg34QtAB2RNXsZsE69O0hK9IsfyOlx0qjUU,22277
96
+ mcp_proxy_adapter/examples/run_security_tests.py,sha256=BFeafoRXOhorJ8ScjjnlmPdRaCG8AaPAxb-PRnSGJTM,22639
97
97
  mcp_proxy_adapter/examples/run_security_tests_fixed.py,sha256=fNQsbALf9548xJ0OGPKYx5Crzg1GbcL8CSh1x_oKu_A,10540
98
98
  mcp_proxy_adapter/examples/security_test_client.py,sha256=0j0-RGg9kppt_IAuYeT8cbXr3N5gqBdzEyPd3RW0bs8,35558
99
99
  mcp_proxy_adapter/examples/setup_test_environment.py,sha256=fAfz1U7qERY-Z9ly15Wld8Zci-5_e9zSrvYJ56Rjowo,11839
@@ -106,6 +106,19 @@ mcp_proxy_adapter/examples/basic_framework/main.py,sha256=cDmqeUN1lDBBwuwLjmnP3q
106
106
  mcp_proxy_adapter/examples/basic_framework/commands/__init__.py,sha256=_VQNLUEdsxUG-4yt9BZI_vtOxHAdGG0OUSsP6Wj-Vz4,76
107
107
  mcp_proxy_adapter/examples/basic_framework/hooks/__init__.py,sha256=IE_EIXMnkdXuakZn7wLD9kBFyfDF5lYi56ejgiBeb-A,70
108
108
  mcp_proxy_adapter/examples/commands/__init__.py,sha256=46FZSOABSeKPffw91JqIWL_UQD_RLL3nAR-ufgb2hr8,169
109
+ mcp_proxy_adapter/examples/examples/basic_framework/__init__.py,sha256=4aYD--R6hy9n9CUxj7Osb9HcdVUMJ6_cfpu4ujkbCwI,345
110
+ mcp_proxy_adapter/examples/examples/basic_framework/main.py,sha256=cDmqeUN1lDBBwuwLjmnP3qIyofCZ3Jr5Ct7Im-qCsUU,1728
111
+ mcp_proxy_adapter/examples/examples/basic_framework/commands/__init__.py,sha256=_VQNLUEdsxUG-4yt9BZI_vtOxHAdGG0OUSsP6Wj-Vz4,76
112
+ mcp_proxy_adapter/examples/examples/basic_framework/hooks/__init__.py,sha256=IE_EIXMnkdXuakZn7wLD9kBFyfDF5lYi56ejgiBeb-A,70
113
+ mcp_proxy_adapter/examples/examples/full_application/__init__.py,sha256=AEqN_gEBzj-swBtTOvRUWqKSdXqJVk1aUtfPghVL-2o,319
114
+ mcp_proxy_adapter/examples/examples/full_application/main.py,sha256=h2d90G6XMJFbJpo2ht7M1IqITZ9nZPi9QtH6ETeE9DI,7791
115
+ mcp_proxy_adapter/examples/examples/full_application/proxy_endpoints.py,sha256=-cpb0nIjzp6OltFHoZqrtFvb4wJf1dgT4WvQ2dcY6Bo,6045
116
+ mcp_proxy_adapter/examples/examples/full_application/commands/__init__.py,sha256=yQHxVSFkAyFLUOdk42QOebUODPlQV9IbydPgF3UKsGM,217
117
+ mcp_proxy_adapter/examples/examples/full_application/commands/custom_echo_command.py,sha256=u9_XOkoHkiFC-tn9B-yGUXfQi9OL0EDxlVVKSERI1wA,3099
118
+ mcp_proxy_adapter/examples/examples/full_application/commands/dynamic_calculator_command.py,sha256=fRWtegpUUVt4wWOz3yE3spMG4h1DM_xbSxg_WqlnbF0,3491
119
+ mcp_proxy_adapter/examples/examples/full_application/hooks/__init__.py,sha256=ORG4cL8cSXEMmZ0CEPz75OVuwg54pdDm2GIBpP4dtcs,200
120
+ mcp_proxy_adapter/examples/examples/full_application/hooks/application_hooks.py,sha256=TYXuHI-KW_mH5r8mSKgNMJCr3moeEKrqC4Eex0U298k,3457
121
+ mcp_proxy_adapter/examples/examples/full_application/hooks/builtin_command_hooks.py,sha256=IaskSrckZS6bE3aGxSBL8aTj-iJTSI2ysfsFjhjncyM,2975
109
122
  mcp_proxy_adapter/examples/full_application/__init__.py,sha256=AEqN_gEBzj-swBtTOvRUWqKSdXqJVk1aUtfPghVL-2o,319
110
123
  mcp_proxy_adapter/examples/full_application/main.py,sha256=h2d90G6XMJFbJpo2ht7M1IqITZ9nZPi9QtH6ETeE9DI,7791
111
124
  mcp_proxy_adapter/examples/full_application/proxy_endpoints.py,sha256=-cpb0nIjzp6OltFHoZqrtFvb4wJf1dgT4WvQ2dcY6Bo,6045
@@ -115,10 +128,13 @@ mcp_proxy_adapter/examples/full_application/commands/dynamic_calculator_command.
115
128
  mcp_proxy_adapter/examples/full_application/hooks/__init__.py,sha256=ORG4cL8cSXEMmZ0CEPz75OVuwg54pdDm2GIBpP4dtcs,200
116
129
  mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py,sha256=TYXuHI-KW_mH5r8mSKgNMJCr3moeEKrqC4Eex0U298k,3457
117
130
  mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py,sha256=IaskSrckZS6bE3aGxSBL8aTj-iJTSI2ysfsFjhjncyM,2975
131
+ mcp_proxy_adapter/examples/scripts/config_generator.py,sha256=4qruYxQ2kGLVOukLX2JOW5kslJ06RhkNqTobAgh4rfw,32801
132
+ mcp_proxy_adapter/examples/scripts/create_certificates_simple.py,sha256=xkIvUYl6hbKlWImQmenG0k_CvIsOsc9ZHICiKY3rtI8,26380
133
+ mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py,sha256=J0qHm_BMY8RYqfuwf7V7xKsHcsRJx8E7x-8JxmW5sPw,15988
118
134
  mcp_proxy_adapter/utils/config_generator.py,sha256=4qruYxQ2kGLVOukLX2JOW5kslJ06RhkNqTobAgh4rfw,32801
119
- mcp_proxy_adapter-6.2.23.dist-info/licenses/LICENSE,sha256=6KdtUcTwmTRbJrAmYjVn7e6S-V42ubeDJ-AiVEzZ510,1075
120
- mcp_proxy_adapter-6.2.23.dist-info/METADATA,sha256=1KBslv8eqB60f-PpYQwoASk5quYTPdn4VSxRLdB0OL4,22348
121
- mcp_proxy_adapter-6.2.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
122
- mcp_proxy_adapter-6.2.23.dist-info/entry_points.txt,sha256=J3eV6ID0lt_VSp4lIdIgBFTqLCThgObNNxRCbyfiMHw,70
123
- mcp_proxy_adapter-6.2.23.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
124
- mcp_proxy_adapter-6.2.23.dist-info/RECORD,,
135
+ mcp_proxy_adapter-6.2.25.dist-info/licenses/LICENSE,sha256=6KdtUcTwmTRbJrAmYjVn7e6S-V42ubeDJ-AiVEzZ510,1075
136
+ mcp_proxy_adapter-6.2.25.dist-info/METADATA,sha256=cteiRynMPhEN2ErSDc0FtqAAZ_n0XgMwdLcvanfwnyQ,22348
137
+ mcp_proxy_adapter-6.2.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
138
+ mcp_proxy_adapter-6.2.25.dist-info/entry_points.txt,sha256=J3eV6ID0lt_VSp4lIdIgBFTqLCThgObNNxRCbyfiMHw,70
139
+ mcp_proxy_adapter-6.2.25.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
140
+ mcp_proxy_adapter-6.2.25.dist-info/RECORD,,