mcp-proxy-adapter 6.2.22__py3-none-any.whl → 6.2.23__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/examples/create_certificates_simple.py +77 -9
- mcp_proxy_adapter/examples/generate_test_configs.py +14 -14
- mcp_proxy_adapter/examples/run_full_test_suite.py +125 -0
- mcp_proxy_adapter/examples/setup_test_environment.py +12 -0
- mcp_proxy_adapter/version.py +1 -1
- {mcp_proxy_adapter-6.2.22.dist-info → mcp_proxy_adapter-6.2.23.dist-info}/METADATA +1 -1
- {mcp_proxy_adapter-6.2.22.dist-info → mcp_proxy_adapter-6.2.23.dist-info}/RECORD +11 -10
- {mcp_proxy_adapter-6.2.22.dist-info → mcp_proxy_adapter-6.2.23.dist-info}/WHEEL +0 -0
- {mcp_proxy_adapter-6.2.22.dist-info → mcp_proxy_adapter-6.2.23.dist-info}/entry_points.txt +0 -0
- {mcp_proxy_adapter-6.2.22.dist-info → mcp_proxy_adapter-6.2.23.dist-info}/licenses/LICENSE +0 -0
- {mcp_proxy_adapter-6.2.22.dist-info → mcp_proxy_adapter-6.2.23.dist-info}/top_level.txt +0 -0
@@ -22,17 +22,18 @@ except ImportError:
|
|
22
22
|
class SimpleCertificateCreator:
|
23
23
|
"""Create certificates using OpenSSL directly."""
|
24
24
|
def __init__(self, certs_dir: str = None, keys_dir: str = None):
|
25
|
+
# Use current working directory as base
|
26
|
+
cwd = Path.cwd()
|
27
|
+
|
25
28
|
if certs_dir:
|
26
29
|
self.certs_dir = Path(certs_dir).resolve()
|
27
30
|
else:
|
28
|
-
self.
|
29
|
-
|
31
|
+
self.certs_dir = cwd / "certs"
|
32
|
+
|
30
33
|
if keys_dir:
|
31
34
|
self.keys_dir = Path(keys_dir).resolve()
|
32
35
|
else:
|
33
|
-
|
34
|
-
self.project_root = Path(__file__).parent.parent.parent
|
35
|
-
self.keys_dir = self.project_root / "mcp_proxy_adapter" / "examples" / "keys"
|
36
|
+
self.keys_dir = cwd / "keys"
|
36
37
|
# Create directories
|
37
38
|
self.certs_dir.mkdir(parents=True, exist_ok=True)
|
38
39
|
self.keys_dir.mkdir(parents=True, exist_ok=True)
|
@@ -450,6 +451,56 @@ class SimpleCertificateCreator:
|
|
450
451
|
# 5. Validate certificates
|
451
452
|
if not self.validate_certificates():
|
452
453
|
success = False
|
454
|
+
# Create compatibility symlinks
|
455
|
+
if success:
|
456
|
+
# CA certificate symlink
|
457
|
+
ca_cert = self.certs_dir / "ca_cert.pem"
|
458
|
+
expected_ca_cert = self.certs_dir / "mcp_proxy_adapter_ca_ca.crt"
|
459
|
+
if ca_cert.exists() and not expected_ca_cert.exists():
|
460
|
+
try:
|
461
|
+
expected_ca_cert.symlink_to(ca_cert)
|
462
|
+
print(f"✅ Created CA certificate symlink: {expected_ca_cert}")
|
463
|
+
except OSError:
|
464
|
+
# On Windows, symlink might require admin privileges, copy instead
|
465
|
+
import shutil
|
466
|
+
shutil.copy2(ca_cert, expected_ca_cert)
|
467
|
+
print(f"✅ Created CA certificate copy: {expected_ca_cert}")
|
468
|
+
|
469
|
+
# Server certificate symlink
|
470
|
+
server_cert = self.certs_dir / "server_cert.pem"
|
471
|
+
expected_server_cert = self.certs_dir / "localhost_server.crt"
|
472
|
+
if server_cert.exists() and not expected_server_cert.exists():
|
473
|
+
try:
|
474
|
+
expected_server_cert.symlink_to(server_cert)
|
475
|
+
print(f"✅ Created server certificate symlink: {expected_server_cert}")
|
476
|
+
except OSError:
|
477
|
+
# On Windows, symlink might require admin privileges, copy instead
|
478
|
+
import shutil
|
479
|
+
shutil.copy2(server_cert, expected_server_cert)
|
480
|
+
print(f"✅ Created server certificate copy: {expected_server_cert}")
|
481
|
+
|
482
|
+
# Server key symlink - check if it's in certs or keys directory
|
483
|
+
server_key_certs = self.certs_dir / "server_key.pem"
|
484
|
+
server_key_keys = self.keys_dir / "server_key.pem"
|
485
|
+
|
486
|
+
if server_key_certs.exists():
|
487
|
+
# Server key is in certs directory, move it to keys directory
|
488
|
+
import shutil
|
489
|
+
shutil.move(str(server_key_certs), str(server_key_keys))
|
490
|
+
print(f"✅ Moved server key to keys directory: {server_key_keys}")
|
491
|
+
|
492
|
+
if server_key_keys.exists():
|
493
|
+
expected_server_key = self.keys_dir / "localhost_server.key"
|
494
|
+
if not expected_server_key.exists():
|
495
|
+
try:
|
496
|
+
expected_server_key.symlink_to(server_key_keys)
|
497
|
+
print(f"✅ Created server key symlink: {expected_server_key}")
|
498
|
+
except OSError:
|
499
|
+
# On Windows, symlink might require admin privileges, copy instead
|
500
|
+
import shutil
|
501
|
+
shutil.copy2(server_key_keys, expected_server_key)
|
502
|
+
print(f"✅ Created server key copy: {expected_server_key}")
|
503
|
+
|
453
504
|
# Print summary
|
454
505
|
print("\n" + "=" * 60)
|
455
506
|
print("📊 CERTIFICATE CREATION SUMMARY")
|
@@ -472,12 +523,29 @@ class SimpleCertificateCreator:
|
|
472
523
|
def main():
|
473
524
|
"""Main function."""
|
474
525
|
parser = argparse.ArgumentParser(description="Create certificates for testing")
|
475
|
-
parser.add_argument("--certs-dir", help="Directory for certificates")
|
476
|
-
parser.add_argument("--keys-dir", help="Directory for keys")
|
526
|
+
parser.add_argument("--certs-dir", help="Directory for certificates (default: ./certs)")
|
527
|
+
parser.add_argument("--keys-dir", help="Directory for keys (default: ./keys)")
|
477
528
|
args = parser.parse_args()
|
529
|
+
|
530
|
+
# If no directories specified, check if we're in a test environment
|
531
|
+
if not args.certs_dir and not args.keys_dir:
|
532
|
+
cwd = Path.cwd()
|
533
|
+
# Check if we're in a test environment by looking for typical directories
|
534
|
+
if (cwd / "configs").exists() and (cwd / "examples").exists():
|
535
|
+
# We're in a test environment, use current directory
|
536
|
+
certs_dir = cwd / "certs"
|
537
|
+
keys_dir = cwd / "keys"
|
538
|
+
else:
|
539
|
+
# Use default project structure
|
540
|
+
certs_dir = None
|
541
|
+
keys_dir = None
|
542
|
+
else:
|
543
|
+
certs_dir = args.certs_dir
|
544
|
+
keys_dir = args.keys_dir
|
545
|
+
|
478
546
|
creator = SimpleCertificateCreator(
|
479
|
-
certs_dir=
|
480
|
-
keys_dir=
|
547
|
+
certs_dir=certs_dir,
|
548
|
+
keys_dir=keys_dir
|
481
549
|
)
|
482
550
|
try:
|
483
551
|
success = creator.create_all()
|
@@ -9,14 +9,14 @@ import json
|
|
9
9
|
import os
|
10
10
|
import argparse
|
11
11
|
from typing import Dict, Any
|
12
|
-
def generate_http_simple_config(port: int =
|
12
|
+
def generate_http_simple_config(port: int = 20000, certs_dir: str = "./certs", keys_dir: str = "./keys") -> Dict[str, Any]:
|
13
13
|
"""Generate HTTP configuration without authorization."""
|
14
14
|
return {
|
15
15
|
"server": {"host": "127.0.0.1", "port": port},
|
16
16
|
"ssl": {"enabled": False},
|
17
17
|
"security": {"enabled": False},
|
18
18
|
"registration": {
|
19
|
-
"enabled":
|
19
|
+
"enabled": False,
|
20
20
|
"auth_method": "token",
|
21
21
|
"server_url": "http://127.0.0.1:3004/proxy",
|
22
22
|
"token": {"enabled": True, "token": "proxy_registration_token_123"},
|
@@ -29,7 +29,7 @@ def generate_http_simple_config(port: int = 8000) -> Dict[str, Any]:
|
|
29
29
|
},
|
30
30
|
"protocols": {"enabled": True, "allowed_protocols": ["http"]}
|
31
31
|
}
|
32
|
-
def generate_http_token_config(port: int =
|
32
|
+
def generate_http_token_config(port: int = 20001, certs_dir: str = "./certs", keys_dir: str = "./keys") -> Dict[str, Any]:
|
33
33
|
"""Generate HTTP configuration with token authorization."""
|
34
34
|
return {
|
35
35
|
"server": {"host": "127.0.0.1", "port": port},
|
@@ -61,7 +61,7 @@ def generate_http_token_config(port: int = 8001) -> Dict[str, Any]:
|
|
61
61
|
},
|
62
62
|
"protocols": {"enabled": True, "allowed_protocols": ["http"]}
|
63
63
|
}
|
64
|
-
def generate_https_simple_config(port: int =
|
64
|
+
def generate_https_simple_config(port: int = 20002, certs_dir: str = "./certs", keys_dir: str = "./keys") -> Dict[str, Any]:
|
65
65
|
"""Generate HTTPS configuration without client certificate verification and authorization."""
|
66
66
|
return {
|
67
67
|
"server": {"host": "127.0.0.1", "port": port},
|
@@ -82,7 +82,7 @@ def generate_https_simple_config(port: int = 8002) -> Dict[str, Any]:
|
|
82
82
|
},
|
83
83
|
"protocols": {"enabled": True, "allowed_protocols": ["http", "https"]}
|
84
84
|
}
|
85
|
-
def generate_https_token_config(port: int =
|
85
|
+
def generate_https_token_config(port: int = 20003, certs_dir: str = "./certs", keys_dir: str = "./keys") -> Dict[str, Any]:
|
86
86
|
"""Generate HTTPS configuration without client certificate verification with token authorization."""
|
87
87
|
return {
|
88
88
|
"server": {"host": "127.0.0.1", "port": port},
|
@@ -117,7 +117,7 @@ def generate_https_token_config(port: int = 8003) -> Dict[str, Any]:
|
|
117
117
|
},
|
118
118
|
"protocols": {"enabled": True, "allowed_protocols": ["http", "https"]}
|
119
119
|
}
|
120
|
-
def generate_mtls_no_roles_config(port: int =
|
120
|
+
def generate_mtls_no_roles_config(port: int = 20004, certs_dir: str = "./certs", keys_dir: str = "./keys") -> Dict[str, Any]:
|
121
121
|
"""Generate mTLS configuration without roles."""
|
122
122
|
return {
|
123
123
|
"server": {"host": "127.0.0.1", "port": port},
|
@@ -135,7 +135,7 @@ def generate_mtls_no_roles_config(port: int = 8004) -> Dict[str, Any]:
|
|
135
135
|
},
|
136
136
|
"protocols": {"enabled": True, "allowed_protocols": ["https", "mtls"]}
|
137
137
|
}
|
138
|
-
def generate_mtls_with_roles_config(port: int =
|
138
|
+
def generate_mtls_with_roles_config(port: int = 20005, certs_dir: str = "./certs", keys_dir: str = "./keys") -> Dict[str, Any]:
|
139
139
|
"""Generate mTLS configuration with roles."""
|
140
140
|
return {
|
141
141
|
"server": {"host": "127.0.0.1", "port": port},
|
@@ -222,15 +222,15 @@ def generate_roles_config() -> Dict[str, Any]:
|
|
222
222
|
"tokens": ["proxy-token-123"]
|
223
223
|
}
|
224
224
|
}
|
225
|
-
def generate_all_configs(output_dir: str) -> None:
|
225
|
+
def generate_all_configs(output_dir: str, certs_dir: str = "./certs", keys_dir: str = "./keys") -> None:
|
226
226
|
"""Generate all 6 configuration types and save them to files."""
|
227
227
|
configs = {
|
228
|
-
"http_simple": generate_http_simple_config(
|
229
|
-
"http_token": generate_http_token_config(
|
230
|
-
"https_simple": generate_https_simple_config(
|
231
|
-
"https_token": generate_https_token_config(
|
232
|
-
"mtls_no_roles": generate_mtls_no_roles_config(
|
233
|
-
"mtls_with_roles": generate_mtls_with_roles_config(
|
228
|
+
"http_simple": generate_http_simple_config(20000, certs_dir, keys_dir),
|
229
|
+
"http_token": generate_http_token_config(20001, certs_dir, keys_dir),
|
230
|
+
"https_simple": generate_https_simple_config(20002, certs_dir, keys_dir),
|
231
|
+
"https_token": generate_https_token_config(20003, certs_dir, keys_dir),
|
232
|
+
"mtls_no_roles": generate_mtls_no_roles_config(20004, certs_dir, keys_dir),
|
233
|
+
"mtls_with_roles": generate_mtls_with_roles_config(20005, certs_dir, keys_dir)
|
234
234
|
}
|
235
235
|
# Ensure output directory exists
|
236
236
|
os.makedirs(output_dir, exist_ok=True)
|
@@ -0,0 +1,125 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Full Test Suite Runner for MCP Proxy Adapter
|
4
|
+
This script automatically runs the complete test suite:
|
5
|
+
1. Setup test environment
|
6
|
+
2. Generate configurations
|
7
|
+
3. Create certificates
|
8
|
+
4. Run security tests
|
9
|
+
|
10
|
+
Author: Vasiliy Zdanovskiy
|
11
|
+
email: vasilyvz@gmail.com
|
12
|
+
"""
|
13
|
+
import sys
|
14
|
+
import subprocess
|
15
|
+
import os
|
16
|
+
from pathlib import Path
|
17
|
+
|
18
|
+
|
19
|
+
def run_command(cmd: list, description: str) -> bool:
|
20
|
+
"""Run a command and return success status."""
|
21
|
+
try:
|
22
|
+
print(f"\n🚀 {description}")
|
23
|
+
print("=" * 60)
|
24
|
+
|
25
|
+
# Change to script directory if running from package
|
26
|
+
script_dir = Path(__file__).parent
|
27
|
+
if script_dir.name == "examples":
|
28
|
+
os.chdir(script_dir)
|
29
|
+
|
30
|
+
result = subprocess.run(
|
31
|
+
cmd,
|
32
|
+
capture_output=False,
|
33
|
+
text=True,
|
34
|
+
check=True,
|
35
|
+
cwd=script_dir
|
36
|
+
)
|
37
|
+
print(f"✅ {description} completed successfully")
|
38
|
+
return True
|
39
|
+
except subprocess.CalledProcessError as e:
|
40
|
+
print(f"❌ {description} failed:")
|
41
|
+
print(f" Command: {' '.join(cmd)}")
|
42
|
+
print(f" Error: {e.stderr}")
|
43
|
+
return False
|
44
|
+
except Exception as e:
|
45
|
+
print(f"❌ {description} failed: {e}")
|
46
|
+
return False
|
47
|
+
|
48
|
+
|
49
|
+
def main():
|
50
|
+
"""Run the complete test suite."""
|
51
|
+
print("🧪 MCP Proxy Adapter - Full Test Suite")
|
52
|
+
print("=" * 60)
|
53
|
+
|
54
|
+
# Check if we're in the right directory
|
55
|
+
current_dir = Path.cwd()
|
56
|
+
if not (current_dir / "setup_test_environment.py").exists():
|
57
|
+
print("❌ Please run this script from the examples directory")
|
58
|
+
return 1
|
59
|
+
|
60
|
+
success = True
|
61
|
+
|
62
|
+
# 1. Setup test environment
|
63
|
+
if not run_command([
|
64
|
+
sys.executable, "-m", "mcp_proxy_adapter.examples.setup_test_environment",
|
65
|
+
"--output-dir", "."
|
66
|
+
], "Setting up test environment"):
|
67
|
+
success = False
|
68
|
+
|
69
|
+
# 2. Generate configurations
|
70
|
+
if success and not run_command([
|
71
|
+
sys.executable, "-m", "mcp_proxy_adapter.examples.generate_test_configs",
|
72
|
+
"--output-dir", "configs"
|
73
|
+
], "Generating test configurations"):
|
74
|
+
success = False
|
75
|
+
|
76
|
+
# 3. Create certificates
|
77
|
+
if success and not run_command([
|
78
|
+
sys.executable, "-m", "mcp_proxy_adapter.examples.create_certificates_simple"
|
79
|
+
], "Creating certificates"):
|
80
|
+
success = False
|
81
|
+
|
82
|
+
# 4. Copy roles.json to root directory
|
83
|
+
if success:
|
84
|
+
import shutil
|
85
|
+
from pathlib import Path
|
86
|
+
roles_file = Path("configs/roles.json")
|
87
|
+
if roles_file.exists():
|
88
|
+
shutil.copy2(roles_file, "roles.json")
|
89
|
+
print("✅ Copied roles.json to root directory")
|
90
|
+
else:
|
91
|
+
success = False
|
92
|
+
print("❌ roles.json not found in configs directory")
|
93
|
+
|
94
|
+
# 5. Run security tests
|
95
|
+
if success and not run_command([
|
96
|
+
sys.executable, "-m", "mcp_proxy_adapter.examples.run_security_tests"
|
97
|
+
], "Running security tests"):
|
98
|
+
success = False
|
99
|
+
|
100
|
+
# Final result
|
101
|
+
print("\n" + "=" * 60)
|
102
|
+
if success:
|
103
|
+
print("🎉 FULL TEST SUITE COMPLETED SUCCESSFULLY!")
|
104
|
+
print("=" * 60)
|
105
|
+
print("\n📋 SUMMARY:")
|
106
|
+
print("✅ Test environment setup")
|
107
|
+
print("✅ Configuration generation")
|
108
|
+
print("✅ Certificate creation")
|
109
|
+
print("✅ Roles configuration")
|
110
|
+
print("✅ Security testing")
|
111
|
+
print("\n🚀 All systems are working correctly!")
|
112
|
+
return 0
|
113
|
+
else:
|
114
|
+
print("❌ FULL TEST SUITE FAILED!")
|
115
|
+
print("=" * 60)
|
116
|
+
print("\n🔧 TROUBLESHOOTING:")
|
117
|
+
print("1. Check the error messages above")
|
118
|
+
print("2. Ensure you have write permissions")
|
119
|
+
print("3. Make sure ports 20000-20010 are free")
|
120
|
+
print("4. Check if mcp_security_framework is installed")
|
121
|
+
return 1
|
122
|
+
|
123
|
+
|
124
|
+
if __name__ == "__main__":
|
125
|
+
exit(main())
|
@@ -99,6 +99,18 @@ def setup_test_environment(output_dir: Path) -> None:
|
|
99
99
|
if cert_tokens_src.exists():
|
100
100
|
shutil.copy2(cert_tokens_src, output_dir / "scripts/")
|
101
101
|
print("✅ Copied generate_certificates_and_tokens.py")
|
102
|
+
|
103
|
+
# Copy roles.json to the root directory for compatibility
|
104
|
+
roles_src = examples_src_root / "roles.json"
|
105
|
+
if roles_src.exists():
|
106
|
+
shutil.copy2(roles_src, output_dir)
|
107
|
+
print("✅ Copied roles.json to root directory")
|
108
|
+
|
109
|
+
# Also copy from configs directory if it exists
|
110
|
+
roles_configs_src = output_dir / "configs" / "roles.json"
|
111
|
+
if roles_configs_src.exists():
|
112
|
+
shutil.copy2(roles_configs_src, output_dir / "roles.json")
|
113
|
+
print("✅ Updated roles.json from configs directory")
|
102
114
|
print(
|
103
115
|
"🎉 Test environment setup completed successfully at: {}".format(
|
104
116
|
output_dir
|
mcp_proxy_adapter/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mcp-proxy-adapter
|
3
|
-
Version: 6.2.
|
3
|
+
Version: 6.2.23
|
4
4
|
Summary: Powerful JSON-RPC microservices framework with built-in security, authentication, and proxy registration
|
5
5
|
Home-page: https://github.com/maverikod/mcp-proxy-adapter
|
6
6
|
Author: Vasiliy Zdanovskiy
|
@@ -4,7 +4,7 @@ mcp_proxy_adapter/config.py,sha256=syjTmiWh66rXcmgK6X2KSzbUkwTQC2W5FfMUpO5bjmo,1
|
|
4
4
|
mcp_proxy_adapter/custom_openapi.py,sha256=jYUrCy8C1mShh3sjKj-JkzSMLAvxDLTvtzSJFj5HUNg,15023
|
5
5
|
mcp_proxy_adapter/main.py,sha256=cm67W6RU-rL1-zEcTLz_yT7AyoZeqhMbQ4_2qMHlueE,2975
|
6
6
|
mcp_proxy_adapter/openapi.py,sha256=36vOEbJjGnVZR6hUhl6mHCD29HYOEFKo2bL0JdGSm-4,13952
|
7
|
-
mcp_proxy_adapter/version.py,sha256=
|
7
|
+
mcp_proxy_adapter/version.py,sha256=cmdFAb5y49RrvFwJN1h125k9acpNWpgNHiIP-UyOdVA,76
|
8
8
|
mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
mcp_proxy_adapter/api/app.py,sha256=g0zHST8xY7xTjMxkCIJEFPck5lD5LyhNzO1hM4S9FhU,29136
|
10
10
|
mcp_proxy_adapter/api/handlers.py,sha256=DcZT7MVBV33q-0EJ0iFqxE0VgBkFt6d_SqoRkntwyvc,8477
|
@@ -81,21 +81,22 @@ 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=xkIvUYl6hbKlWImQmenG0k_CvIsOsc9ZHICiKY3rtI8,26380
|
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=EnwhtadwcAWs3dtkVSWUG2Xhw7VHb9i0WQbVCvxGR14,12035
|
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
95
|
mcp_proxy_adapter/examples/run_proxy_server.py,sha256=vkEjqREcOSw2elH_VOBLa0cFjL8gCZp9nkRa8YLsndI,5119
|
95
96
|
mcp_proxy_adapter/examples/run_security_tests.py,sha256=wxt3gbcJbg34QtAB2RNXsZsE69O0hK9IsfyOlx0qjUU,22277
|
96
97
|
mcp_proxy_adapter/examples/run_security_tests_fixed.py,sha256=fNQsbALf9548xJ0OGPKYx5Crzg1GbcL8CSh1x_oKu_A,10540
|
97
98
|
mcp_proxy_adapter/examples/security_test_client.py,sha256=0j0-RGg9kppt_IAuYeT8cbXr3N5gqBdzEyPd3RW0bs8,35558
|
98
|
-
mcp_proxy_adapter/examples/setup_test_environment.py,sha256=
|
99
|
+
mcp_proxy_adapter/examples/setup_test_environment.py,sha256=fAfz1U7qERY-Z9ly15Wld8Zci-5_e9zSrvYJ56Rjowo,11839
|
99
100
|
mcp_proxy_adapter/examples/test_config.py,sha256=1X9X8lNlWOcM1ZbIzteeMvLdgxnJEK_ev1BYTZiA9ws,6451
|
100
101
|
mcp_proxy_adapter/examples/test_config_generator.py,sha256=SBKL0bv-kUwUUbwrFVbxuA_6pDvK2573Jxm9wPiyI8s,3927
|
101
102
|
mcp_proxy_adapter/examples/test_examples.py,sha256=KH095FFEQDMKYZglclr5qy3cW__t3H8VX1l8dvCkQos,12132
|
@@ -115,9 +116,9 @@ mcp_proxy_adapter/examples/full_application/hooks/__init__.py,sha256=ORG4cL8cSXE
|
|
115
116
|
mcp_proxy_adapter/examples/full_application/hooks/application_hooks.py,sha256=TYXuHI-KW_mH5r8mSKgNMJCr3moeEKrqC4Eex0U298k,3457
|
116
117
|
mcp_proxy_adapter/examples/full_application/hooks/builtin_command_hooks.py,sha256=IaskSrckZS6bE3aGxSBL8aTj-iJTSI2ysfsFjhjncyM,2975
|
117
118
|
mcp_proxy_adapter/utils/config_generator.py,sha256=4qruYxQ2kGLVOukLX2JOW5kslJ06RhkNqTobAgh4rfw,32801
|
118
|
-
mcp_proxy_adapter-6.2.
|
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.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|