mcp-proxy-adapter 6.2.33__py3-none-any.whl → 6.2.35__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.
@@ -8,8 +8,7 @@ Author: Vasiliy Zdanovskiy
8
8
  email: vasilyvz@gmail.com
9
9
  """
10
10
 
11
- import logging
12
- from typing import Dict, Any, Optional, Callable, Awaitable
11
+ from typing import Dict, Any, Callable, Awaitable
13
12
  from fastapi import Request, Response
14
13
  from starlette.middleware.base import BaseHTTPMiddleware
15
14
 
@@ -17,23 +16,25 @@ from mcp_proxy_adapter.core.logging import logger
17
16
 
18
17
  # Import mcp_security_framework components
19
18
  try:
20
- from mcp_security_framework import AuthManager
21
- from mcp_security_framework.schemas.config import AuthConfig
19
+ from mcp_security_framework import AuthManager, PermissionManager
20
+ from mcp_security_framework.schemas.config import (
21
+ AuthConfig, PermissionConfig
22
+ )
22
23
  _MCP_SECURITY_AVAILABLE = True
23
24
  print("✅ mcp_security_framework available in middleware")
24
25
  except ImportError:
25
26
  _MCP_SECURITY_AVAILABLE = False
26
- print("⚠️ mcp_security_framework not available in middleware, using basic auth")
27
+ print("⚠️ mcp_security_framework not available in middleware, "
28
+ "using basic auth")
27
29
 
28
30
 
29
31
  class UserInfoMiddleware(BaseHTTPMiddleware):
30
32
  """
31
33
  Middleware for setting user information in request.state.
32
-
34
+
33
35
  This middleware extracts user information from authentication headers
34
36
  and sets it in request.state for use by commands.
35
37
  """
36
-
37
38
  def __init__(self, app, config: Dict[str, Any]):
38
39
  """
39
40
  Initialize user info middleware.
@@ -54,7 +55,11 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
54
55
  # Get API keys configuration
55
56
  security_config = config.get("security", {})
56
57
  auth_config = security_config.get("auth", {})
58
+ permissions_config = security_config.get("permissions", {})
57
59
 
60
+ # Check if permissions are enabled
61
+ permissions_enabled = permissions_config.get("enabled", False)
62
+
58
63
  # Create AuthConfig for mcp_security_framework
59
64
  mcp_auth_config = AuthConfig(
60
65
  enabled=True,
@@ -62,8 +67,50 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
62
67
  api_keys=auth_config.get("api_keys", {})
63
68
  )
64
69
 
65
- self.auth_manager = AuthManager(mcp_auth_config)
66
- logger.info("✅ User info middleware initialized with mcp_security_framework")
70
+ # Initialize PermissionManager only if permissions are enabled
71
+ if permissions_enabled:
72
+ # Create PermissionConfig for mcp_security_framework
73
+ mcp_permission_config = PermissionConfig(
74
+ roles_file=permissions_config.get("roles_file"),
75
+ default_role=permissions_config.get("default_role", "guest"),
76
+ admin_role=permissions_config.get("admin_role", "admin"),
77
+ role_hierarchy=permissions_config.get("role_hierarchy", {}),
78
+ permission_cache_enabled=permissions_config.get(
79
+ "permission_cache_enabled", True
80
+ ),
81
+ permission_cache_ttl=permissions_config.get(
82
+ "permission_cache_ttl", 300
83
+ ),
84
+ wildcard_permissions=permissions_config.get(
85
+ "wildcard_permissions", False
86
+ ),
87
+ strict_mode=permissions_config.get("strict_mode", True),
88
+ roles=permissions_config.get("roles", {})
89
+ )
90
+
91
+ # Initialize PermissionManager first
92
+ self.permission_manager = PermissionManager(mcp_permission_config)
93
+ else:
94
+ # Create a minimal PermissionManager when permissions are disabled
95
+ mcp_permission_config = PermissionConfig(
96
+ roles_file=None,
97
+ default_role="guest",
98
+ admin_role="admin",
99
+ role_hierarchy={},
100
+ permission_cache_enabled=False,
101
+ permission_cache_ttl=300,
102
+ wildcard_permissions=False,
103
+ strict_mode=False,
104
+ roles={}
105
+ )
106
+ self.permission_manager = PermissionManager(mcp_permission_config)
107
+
108
+ # Initialize AuthManager with permission_manager
109
+ self.auth_manager = AuthManager(
110
+ mcp_auth_config, self.permission_manager
111
+ )
112
+ logger.info("✅ User info middleware initialized with "
113
+ "mcp_security_framework")
67
114
  except Exception as e:
68
115
  logger.warning(f"⚠️ Failed to initialize AuthManager: {e}")
69
116
  self._security_available = False
@@ -74,21 +121,23 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
74
121
  auth_config = security_config.get("auth", {})
75
122
  self.api_keys = auth_config.get("api_keys", {})
76
123
  logger.info("ℹ️ User info middleware initialized with basic auth")
77
-
78
- async def dispatch(self, request: Request, call_next: Callable[[Request], Awaitable[Response]]) -> Response:
124
+
125
+ async def dispatch(
126
+ self, request: Request,
127
+ call_next: Callable[[Request], Awaitable[Response]]
128
+ ) -> Response:
79
129
  """
80
130
  Process request and set user info in request.state.
81
-
131
+
82
132
  Args:
83
133
  request: Request object
84
134
  call_next: Next handler
85
-
135
+
86
136
  Returns:
87
137
  Response object
88
138
  """
89
139
  # Extract API key from headers
90
140
  api_key = request.headers.get("X-API-Key")
91
-
92
141
  if api_key:
93
142
  if self.auth_manager and self._security_available:
94
143
  try:
@@ -99,11 +148,16 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
99
148
  # Set user info from AuthManager result
100
149
  request.state.user = {
101
150
  "id": api_key,
102
- "role": auth_result.roles[0] if auth_result.roles else "guest",
151
+ "role": (auth_result.roles[0]
152
+ if auth_result.roles else "guest"),
103
153
  "roles": auth_result.roles or ["guest"],
104
- "permissions": getattr(auth_result, 'permissions', ["read"])
154
+ "permissions": getattr(
155
+ auth_result, 'permissions', ["read"]
156
+ )
105
157
  }
106
- logger.debug(f"✅ Authenticated user with mcp_security_framework: {request.state.user}")
158
+ logger.debug(f"✅ Authenticated user with "
159
+ f"mcp_security_framework: "
160
+ f"{request.state.user}")
107
161
  else:
108
162
  # Authentication failed
109
163
  request.state.user = {
@@ -112,9 +166,11 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
112
166
  "roles": ["guest"],
113
167
  "permissions": ["read"]
114
168
  }
115
- logger.debug(f"❌ Authentication failed for API key: {api_key[:8]}...")
169
+ logger.debug(f"❌ Authentication failed for API key: "
170
+ f"{api_key[:8]}...")
116
171
  except Exception as e:
117
- logger.warning(f"⚠️ AuthManager error: {e}, falling back to basic auth")
172
+ logger.warning(f"⚠️ AuthManager error: {e}, "
173
+ f"falling back to basic auth")
118
174
  self._security_available = False
119
175
 
120
176
  if not self._security_available:
@@ -124,8 +180,12 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
124
180
 
125
181
  # Get permissions for this role from roles file if available
126
182
  role_permissions = ["read"] # default permissions
127
- if hasattr(self, 'roles_config') and self.roles_config and user_role in self.roles_config:
128
- role_permissions = self.roles_config[user_role].get("permissions", ["read"])
183
+ if (hasattr(self, 'roles_config') and
184
+ self.roles_config and
185
+ user_role in self.roles_config):
186
+ role_permissions = self.roles_config[user_role].get(
187
+ "permissions", ["read"]
188
+ )
129
189
 
130
190
  # Set user info in request.state
131
191
  request.state.user = {
@@ -135,7 +195,8 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
135
195
  "permissions": role_permissions
136
196
  }
137
197
 
138
- logger.debug(f"✅ Authenticated user with basic auth: {request.state.user}")
198
+ logger.debug(f"✅ Authenticated user with basic auth: "
199
+ f"{request.state.user}")
139
200
  else:
140
201
  # API key not found
141
202
  request.state.user = {
@@ -154,5 +215,5 @@ class UserInfoMiddleware(BaseHTTPMiddleware):
154
215
  "permissions": ["read"]
155
216
  }
156
217
  logger.debug("ℹ️ No API key provided, using guest access")
157
-
218
+
158
219
  return await call_next(request)
@@ -24,7 +24,7 @@ from requests.exceptions import RequestException
24
24
 
25
25
  # Import security framework components
26
26
  try:
27
- from mcp_security_framework import SecurityManager, AuthManager, CertificateManager
27
+ from mcp_security_framework import SecurityManager, AuthManager, CertificateManager, PermissionManager
28
28
  from mcp_security_framework.utils import generate_api_key, create_jwt_token, validate_jwt_token
29
29
  from mcp_security_framework.utils import extract_roles_from_cert, validate_certificate_chain
30
30
  from mcp_security_framework.utils import create_ssl_context, validate_server_certificate
@@ -85,9 +85,13 @@ class UniversalClient:
85
85
  # Initialize security manager
86
86
  self.security_manager = SecurityManager(self.security_config)
87
87
 
88
- # Initialize auth manager
88
+ # Initialize permission manager first
89
+ permissions_config = self.security_config.get("permissions", {})
90
+ self.permission_manager = PermissionManager(permissions_config)
91
+
92
+ # Initialize auth manager with permission_manager
89
93
  auth_config = self.security_config.get("auth", {})
90
- self.auth_manager = AuthManager(auth_config)
94
+ self.auth_manager = AuthManager(auth_config, self.permission_manager)
91
95
 
92
96
  # Initialize certificate manager
93
97
  cert_config = self.security_config.get("certificates", {})
@@ -108,6 +108,23 @@ class ConfigValidator:
108
108
  security_enabled = security_config.get("enabled", True)
109
109
  auth_enabled = self.config.get("auth_enabled", False)
110
110
 
111
+ # Validate permissions configuration
112
+ permissions_config = security_config.get("permissions", {})
113
+ permissions_enabled = permissions_config.get("enabled", False)
114
+
115
+ if permissions_enabled:
116
+ # Permissions require authentication to identify users
117
+ auth_config = security_config.get("auth", {})
118
+ if not auth_config.get("enabled", False):
119
+ self.errors.append("Permissions are enabled but authentication is disabled. Permissions require authentication to identify users.")
120
+ return False
121
+
122
+ # Check if there are any authentication methods available
123
+ auth_methods = auth_config.get("methods", [])
124
+ if not auth_methods:
125
+ self.errors.append("Permissions are enabled but no authentication methods are configured. At least one authentication method is required.")
126
+ return False
127
+
111
128
  if security_enabled and auth_enabled:
112
129
  # Validate auth configuration
113
130
  auth_config = security_config.get("auth", {})
@@ -49,7 +49,7 @@ class ProxyRegistrationManager:
49
49
  self.registration_config = config.get("registration", config.get("proxy_registration", {}))
50
50
 
51
51
  # Basic registration settings
52
- self.proxy_url = self.registration_config.get("proxy_url", self.registration_config.get("server_url", "https://proxy-registry.example.com"))
52
+ self.proxy_url = self.registration_config.get("proxy_url", "https://proxy-registry.example.com")
53
53
  self.server_id = self.registration_config.get("server_id", self.registration_config.get("proxy_info", {}).get("name", "mcp_proxy_adapter"))
54
54
  self.server_name = self.registration_config.get("server_name", self.registration_config.get("proxy_info", {}).get("name", "MCP Proxy Adapter"))
55
55
  self.description = self.registration_config.get("description", self.registration_config.get("proxy_info", {}).get("description", "JSON-RPC API for interacting with MCP Proxy"))
@@ -105,25 +105,42 @@ class SecurityIntegration:
105
105
 
106
106
  # Create permission config - handle null values properly
107
107
  permissions_section = security_section.get("permissions", {})
108
- roles_file = permissions_section.get("roles_file")
109
-
110
- # If roles_file is None or empty string, don't pass it to avoid framework errors
111
- if roles_file is None or roles_file == "":
112
- logger.warning("roles_file is None or empty, permissions will use default configuration")
113
- roles_file = None
108
+ permissions_enabled = permissions_section.get("enabled", True)
114
109
 
115
- permission_config = PermissionConfig(
116
- enabled=permissions_section.get("enabled", True),
117
- roles_file=roles_file,
118
- default_role=permissions_section.get("default_role", "guest"),
119
- admin_role=permissions_section.get("admin_role", "admin"),
120
- role_hierarchy=permissions_section.get("role_hierarchy", {}),
121
- permission_cache_enabled=permissions_section.get("permission_cache_enabled", True),
122
- permission_cache_ttl=permissions_section.get("permission_cache_ttl", 300),
123
- wildcard_permissions=permissions_section.get("wildcard_permissions", False),
124
- strict_mode=permissions_section.get("strict_mode", True),
125
- roles=permissions_section.get("roles")
126
- )
110
+ if permissions_enabled:
111
+ roles_file = permissions_section.get("roles_file")
112
+
113
+ # If roles_file is None or empty string, don't pass it to avoid framework errors
114
+ if roles_file is None or roles_file == "":
115
+ logger.warning("roles_file is None or empty, permissions will use default configuration")
116
+ roles_file = None
117
+
118
+ permission_config = PermissionConfig(
119
+ enabled=True,
120
+ roles_file=roles_file,
121
+ default_role=permissions_section.get("default_role", "guest"),
122
+ admin_role=permissions_section.get("admin_role", "admin"),
123
+ role_hierarchy=permissions_section.get("role_hierarchy", {}),
124
+ permission_cache_enabled=permissions_section.get("permission_cache_enabled", True),
125
+ permission_cache_ttl=permissions_section.get("permission_cache_ttl", 300),
126
+ wildcard_permissions=permissions_section.get("wildcard_permissions", False),
127
+ strict_mode=permissions_section.get("strict_mode", True),
128
+ roles=permissions_section.get("roles")
129
+ )
130
+ else:
131
+ # Create minimal permission config when permissions are disabled
132
+ permission_config = PermissionConfig(
133
+ enabled=False,
134
+ roles_file=None,
135
+ default_role="guest",
136
+ admin_role="admin",
137
+ role_hierarchy={},
138
+ permission_cache_enabled=False,
139
+ permission_cache_ttl=300,
140
+ wildcard_permissions=False,
141
+ strict_mode=False,
142
+ roles={}
143
+ )
127
144
 
128
145
  # Create rate limit config
129
146
  rate_limit_config = RateLimitConfig(
@@ -19,7 +19,7 @@ import requests
19
19
  from requests.exceptions import RequestException
20
20
  # Import security framework components
21
21
  try:
22
- from mcp_security_framework import SecurityManager, AuthManager, CertificateManager
22
+ from mcp_security_framework import SecurityManager, AuthManager, CertificateManager, PermissionManager
23
23
  from mcp_security_framework.utils import generate_api_key, create_jwt_token, validate_jwt_token
24
24
  from mcp_security_framework.utils import extract_roles_from_cert, validate_certificate_chain
25
25
  from mcp_security_framework.utils import create_ssl_context, validate_server_certificate
@@ -69,9 +69,12 @@ class UniversalClient:
69
69
  try:
70
70
  # Initialize security manager
71
71
  self.security_manager = SecurityManager(self.security_config)
72
- # Initialize auth manager
72
+ # Initialize permission manager first
73
+ permissions_config = self.security_config.get("permissions", {})
74
+ self.permission_manager = PermissionManager(permissions_config)
75
+ # Initialize auth manager with permission_manager
73
76
  auth_config = self.security_config.get("auth", {})
74
- self.auth_manager = AuthManager(auth_config)
77
+ self.auth_manager = AuthManager(auth_config, self.permission_manager)
75
78
  # Initialize certificate manager
76
79
  cert_config = self.security_config.get("certificates", {})
77
80
  self.cert_manager = CertificateManager(cert_config)
@@ -2,5 +2,5 @@
2
2
  Version information for MCP Proxy Adapter.
3
3
  """
4
4
 
5
- __version__ = "6.2.33"
5
+ __version__ = "6.2.35"
6
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-proxy-adapter
3
- Version: 6.2.33
3
+ Version: 6.2.35
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=QIOV57A_hwDH2z_BVEBJKDsPpa3IUKlqhRAij4bpQik,2
4
4
  mcp_proxy_adapter/custom_openapi.py,sha256=jYUrCy8C1mShh3sjKj-JkzSMLAvxDLTvtzSJFj5HUNg,15023
5
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=d4FPo6o_rBMswssVvPJUEnRst3KHEj71HdsuUnKN2y8,76
7
+ mcp_proxy_adapter/version.py,sha256=Ejo8js-6RkuGhTLDydUfW-ZiZvYdAHVlTD1lhcEpGmE,76
8
8
  mcp_proxy_adapter/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  mcp_proxy_adapter/api/app.py,sha256=khl4kaI4mJ6dNbfAK7hR97Ek-eWC9NBeuXHr6GVbLoU,28911
10
10
  mcp_proxy_adapter/api/handlers.py,sha256=DcZT7MVBV33q-0EJ0iFqxE0VgBkFt6d_SqoRkntwyvc,8477
@@ -21,7 +21,7 @@ mcp_proxy_adapter/api/middleware/performance.py,sha256=dHBxTF43LEGXMKHMH3A8ybKmw
21
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
- mcp_proxy_adapter/api/middleware/user_info_middleware.py,sha256=CWZvwUqieNhC8_ArTvncRjFfU3RHusO-dMcUSvRv01A,6311
24
+ mcp_proxy_adapter/api/middleware/user_info_middleware.py,sha256=YGtt_1Q4GkvdFopMC2wTfC3OZZXDiOU4v5BxlD1Ge9w,9168
25
25
  mcp_proxy_adapter/commands/__init__.py,sha256=r791wg4FKhWSi5rqA3vekDcGf5kr18pwF1woX-dnZKo,1525
26
26
  mcp_proxy_adapter/commands/auth_validation_command.py,sha256=z612WJDVgZwaCrxdQhATwRc5i3qxH37MPuIV6SuZPn8,15083
27
27
  mcp_proxy_adapter/commands/base.py,sha256=tunyrmt-LYJMQZslAZQor3KZvOrn1IYNpL5uOAnSdxc,15791
@@ -57,22 +57,22 @@ mcp_proxy_adapter/core/app_factory.py,sha256=Xwyz40GNOWWa7ThArweawNBY4WI4bEI3_cj
57
57
  mcp_proxy_adapter/core/app_runner.py,sha256=JPpx9rKmaHAVdFnHRl2rXycptQkTSQ13Er7Qf1KZIA4,10614
58
58
  mcp_proxy_adapter/core/auth_validator.py,sha256=lJxBVkoQWSk5CNtnPYMEJSsz4FhcXK-gB5QJ_OP9jEE,20937
59
59
  mcp_proxy_adapter/core/certificate_utils.py,sha256=7VOhjRcygCToYgPTUt_MgcNILdpRBRBNZSFpeS_QrfA,39541
60
- mcp_proxy_adapter/core/client.py,sha256=YxtaHvMoqKcjWJ-2mf2FH22wUGWUZjXMEKPqxypNOPE,21340
60
+ mcp_proxy_adapter/core/client.py,sha256=AeNjMyaTnnR0g6Sw_c28X_le8o5SbEi-_PaRtVttGWQ,21624
61
61
  mcp_proxy_adapter/core/client_manager.py,sha256=sKEhapMpogqb54WIWEpz2bMjrX3wvYooX-a844IfCTU,9164
62
62
  mcp_proxy_adapter/core/client_security.py,sha256=8isHpvv-7H85QzI8K3Pfyr_KdvpE2xYyIT4wqWrttNU,13575
63
63
  mcp_proxy_adapter/core/config_converter.py,sha256=FAA2zx-yRgqMgzg73o9Aq5CEEfodNCeaA8Yluto4wAs,16985
64
- mcp_proxy_adapter/core/config_validator.py,sha256=qDVmkRatuDeWylIPLjMq02Vpzff6DDTE_CstpzqGi7o,7773
64
+ mcp_proxy_adapter/core/config_validator.py,sha256=fRN0D727FYlka-Yn0x3-tABJFrXjXorWR1fAD97e02c,8722
65
65
  mcp_proxy_adapter/core/errors.py,sha256=s34OxiIR4NCJu_pYSigKXqrIvRjUUK2OWw0X4dpDjIA,5151
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
69
  mcp_proxy_adapter/core/protocol_manager.py,sha256=ISFRXjUuK4Q3uMbVB8-O_ozQSsDEH0PQA_HAKGeUrrw,14763
70
70
  mcp_proxy_adapter/core/proxy_client.py,sha256=n44T5iBS29y6E2lQLGKpOQxPYVrxIl98OAs6mMuhEsM,22916
71
- mcp_proxy_adapter/core/proxy_registration.py,sha256=OeSDjID-1ofJxRQhmzKGoXM6E-Pk0WmuUfMdsiSo2u0,19829
71
+ mcp_proxy_adapter/core/proxy_registration.py,sha256=Mmh-hWVJKkADLP8361Nx_SGFp9JRwtWnQtjuOhGx5Ss,19785
72
72
  mcp_proxy_adapter/core/role_utils.py,sha256=wMoTVz3gF5fM7jozNMwsEwPkp1tui26M-t_KH1Oz8gs,12880
73
73
  mcp_proxy_adapter/core/security_adapter.py,sha256=wZ3OH1WzhUdpN8N8CrGJSFFVNi474DqdazIqQ1T8PN4,13343
74
74
  mcp_proxy_adapter/core/security_factory.py,sha256=4r7qvBq30XfosGD_b1ZHyNVLN8rOQ3NAKuaCOCEK8jA,8262
75
- mcp_proxy_adapter/core/security_integration.py,sha256=6oJKVCL1CRnk3sTWX-PBzDjv737oe4QL-9r3l89kRkc,13715
75
+ mcp_proxy_adapter/core/security_integration.py,sha256=axeNotm4DZBZhbVXIfHHV0TsX4KVhvf1shbIAHEEkZI,14385
76
76
  mcp_proxy_adapter/core/server_adapter.py,sha256=8dhUlLxuYjaoNgMHieFCFgDRjxskP--Y5uoAhbN6RLw,9823
77
77
  mcp_proxy_adapter/core/server_engine.py,sha256=SFENSDrVMlBD--HgKSRVklhrtLKSRSZhs_3UHxFCGbg,9540
78
78
  mcp_proxy_adapter/core/settings.py,sha256=ZfUnmqD1tjAuaQo2VAF8evC1oHUit7gTu4WkTF0IMYI,10628
@@ -100,7 +100,7 @@ mcp_proxy_adapter/examples/setup_test_environment.py,sha256=fAfz1U7qERY-Z9ly15Wl
100
100
  mcp_proxy_adapter/examples/test_config.py,sha256=1X9X8lNlWOcM1ZbIzteeMvLdgxnJEK_ev1BYTZiA9ws,6451
101
101
  mcp_proxy_adapter/examples/test_config_generator.py,sha256=SBKL0bv-kUwUUbwrFVbxuA_6pDvK2573Jxm9wPiyI8s,3927
102
102
  mcp_proxy_adapter/examples/test_examples.py,sha256=KH095FFEQDMKYZglclr5qy3cW__t3H8VX1l8dvCkQos,12132
103
- mcp_proxy_adapter/examples/universal_client.py,sha256=IIKGRa0__KoWVla3VnVl-RjkkG_nPpM8vglPm70pV9c,26948
103
+ mcp_proxy_adapter/examples/universal_client.py,sha256=qPwDWE33b_WMZCdNE25wRRxvSsMr2syOdeUlF1gUY-I,27219
104
104
  mcp_proxy_adapter/examples/basic_framework/__init__.py,sha256=4aYD--R6hy9n9CUxj7Osb9HcdVUMJ6_cfpu4ujkbCwI,345
105
105
  mcp_proxy_adapter/examples/basic_framework/main.py,sha256=cDmqeUN1lDBBwuwLjmnP3qIyofCZ3Jr5Ct7Im-qCsUU,1728
106
106
  mcp_proxy_adapter/examples/basic_framework/commands/__init__.py,sha256=_VQNLUEdsxUG-4yt9BZI_vtOxHAdGG0OUSsP6Wj-Vz4,76
@@ -134,9 +134,9 @@ mcp_proxy_adapter/examples/scripts/generate_certificates_and_tokens.py,sha256=J0
134
134
  mcp_proxy_adapter/schemas/base_schema.json,sha256=v9G9cGMd4dRhCZsOQ_FMqOi5VFyVbI6Cf3fyIvOT9dc,2881
135
135
  mcp_proxy_adapter/schemas/openapi_schema.json,sha256=C3yLkwmDsvnLW9B5gnKKdBGl4zxkeU-rEmjTrNVsQU0,8405
136
136
  mcp_proxy_adapter/utils/config_generator.py,sha256=2dxwBh9k_nUw9kgytZso5TNOQpBqd3c-RpKSTLoHlLE,46465
137
- mcp_proxy_adapter-6.2.33.dist-info/licenses/LICENSE,sha256=6KdtUcTwmTRbJrAmYjVn7e6S-V42ubeDJ-AiVEzZ510,1075
138
- mcp_proxy_adapter-6.2.33.dist-info/METADATA,sha256=FvFS4jfncHbjHXuCZq60CxnWZT_XRZQbP9KE5tCxiD4,22348
139
- mcp_proxy_adapter-6.2.33.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
140
- mcp_proxy_adapter-6.2.33.dist-info/entry_points.txt,sha256=J3eV6ID0lt_VSp4lIdIgBFTqLCThgObNNxRCbyfiMHw,70
141
- mcp_proxy_adapter-6.2.33.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
142
- mcp_proxy_adapter-6.2.33.dist-info/RECORD,,
137
+ mcp_proxy_adapter-6.2.35.dist-info/licenses/LICENSE,sha256=6KdtUcTwmTRbJrAmYjVn7e6S-V42ubeDJ-AiVEzZ510,1075
138
+ mcp_proxy_adapter-6.2.35.dist-info/METADATA,sha256=Zb9ZBBx8q337nWqYhTiRrgjAvTxpKVWdpY5ozjwtI5o,22348
139
+ mcp_proxy_adapter-6.2.35.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
140
+ mcp_proxy_adapter-6.2.35.dist-info/entry_points.txt,sha256=J3eV6ID0lt_VSp4lIdIgBFTqLCThgObNNxRCbyfiMHw,70
141
+ mcp_proxy_adapter-6.2.35.dist-info/top_level.txt,sha256=JZT7vPLBYrtroX-ij68JBhJYbjDdghcV-DFySRy-Nnw,18
142
+ mcp_proxy_adapter-6.2.35.dist-info/RECORD,,