mcp-proxy-adapter 6.2.24__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.
- mcp_proxy_adapter/api/app.py +0 -3
- mcp_proxy_adapter/api/middleware/protocol_middleware.py +10 -10
- mcp_proxy_adapter/commands/health_command.py +1 -1
- mcp_proxy_adapter/core/protocol_manager.py +9 -9
- mcp_proxy_adapter/examples/create_certificates_simple.py +7 -17
- mcp_proxy_adapter/examples/examples/basic_framework/__init__.py +9 -0
- mcp_proxy_adapter/examples/examples/basic_framework/commands/__init__.py +4 -0
- mcp_proxy_adapter/examples/examples/basic_framework/hooks/__init__.py +4 -0
- mcp_proxy_adapter/examples/examples/basic_framework/main.py +44 -0
- mcp_proxy_adapter/examples/examples/full_application/__init__.py +12 -0
- mcp_proxy_adapter/examples/examples/full_application/commands/__init__.py +7 -0
- mcp_proxy_adapter/examples/examples/full_application/commands/custom_echo_command.py +80 -0
- mcp_proxy_adapter/examples/examples/full_application/commands/dynamic_calculator_command.py +90 -0
- mcp_proxy_adapter/examples/examples/full_application/hooks/__init__.py +7 -0
- mcp_proxy_adapter/examples/examples/full_application/hooks/application_hooks.py +75 -0
- mcp_proxy_adapter/examples/examples/full_application/hooks/builtin_command_hooks.py +71 -0
- mcp_proxy_adapter/examples/examples/full_application/main.py +173 -0
- mcp_proxy_adapter/examples/examples/full_application/proxy_endpoints.py +154 -0
- mcp_proxy_adapter/examples/generate_test_configs.py +70 -33
- mcp_proxy_adapter/examples/run_full_test_suite.py +302 -109
- mcp_proxy_adapter/examples/run_security_tests.py +14 -5
- mcp_proxy_adapter/examples/scripts/config_generator.py +740 -0
- mcp_proxy_adapter/examples/scripts/create_certificates_simple.py +560 -0
- mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py +369 -0
- mcp_proxy_adapter/main.py +0 -2
- {mcp_proxy_adapter-6.2.24.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/METADATA +1 -1
- {mcp_proxy_adapter-6.2.24.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/RECORD +31 -15
- {mcp_proxy_adapter-6.2.24.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/WHEEL +0 -0
- {mcp_proxy_adapter-6.2.24.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/entry_points.txt +0 -0
- {mcp_proxy_adapter-6.2.24.dist-info → mcp_proxy_adapter-6.2.25.dist-info}/licenses/LICENSE +0 -0
- {mcp_proxy_adapter-6.2.24.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
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mcp-proxy-adapter
|
3
|
-
Version: 6.2.
|
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
|
@@ -2,11 +2,11 @@ mcp_proxy_adapter/__init__.py,sha256=B7m1YWyv_Wb87-Q-JqVpHQgwajnfIgDyZ_iIxzdTbBY
|
|
2
2
|
mcp_proxy_adapter/__main__.py,sha256=-Wp1myP9DzJNB9j97mj62C8kFk5YUbCmd0e7Rnwte0A,769
|
3
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=
|
5
|
+
mcp_proxy_adapter/main.py,sha256=9qt_pEQdq8roUc73CumfDn6jDWP_NyfdE1lCGEynv5I,2841
|
6
6
|
mcp_proxy_adapter/openapi.py,sha256=36vOEbJjGnVZR6hUhl6mHCD29HYOEFKo2bL0JdGSm-4,13952
|
7
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
120
|
-
mcp_proxy_adapter-6.2.
|
121
|
-
mcp_proxy_adapter-6.2.
|
122
|
-
mcp_proxy_adapter-6.2.
|
123
|
-
mcp_proxy_adapter-6.2.
|
124
|
-
mcp_proxy_adapter-6.2.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|