fastmcp 2.12.5__py3-none-any.whl → 2.14.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fastmcp/__init__.py +2 -23
- fastmcp/cli/__init__.py +0 -3
- fastmcp/cli/__main__.py +5 -0
- fastmcp/cli/cli.py +19 -33
- fastmcp/cli/install/claude_code.py +6 -6
- fastmcp/cli/install/claude_desktop.py +3 -3
- fastmcp/cli/install/cursor.py +18 -12
- fastmcp/cli/install/gemini_cli.py +3 -3
- fastmcp/cli/install/mcp_json.py +3 -3
- fastmcp/cli/install/shared.py +0 -15
- fastmcp/cli/run.py +13 -8
- fastmcp/cli/tasks.py +110 -0
- fastmcp/client/__init__.py +9 -9
- fastmcp/client/auth/oauth.py +123 -225
- fastmcp/client/client.py +697 -95
- fastmcp/client/elicitation.py +11 -5
- fastmcp/client/logging.py +18 -14
- fastmcp/client/messages.py +7 -5
- fastmcp/client/oauth_callback.py +85 -171
- fastmcp/client/roots.py +2 -1
- fastmcp/client/sampling.py +1 -1
- fastmcp/client/tasks.py +614 -0
- fastmcp/client/transports.py +117 -30
- fastmcp/contrib/component_manager/__init__.py +1 -1
- fastmcp/contrib/component_manager/component_manager.py +2 -2
- fastmcp/contrib/component_manager/component_service.py +10 -26
- fastmcp/contrib/mcp_mixin/README.md +32 -1
- fastmcp/contrib/mcp_mixin/__init__.py +2 -2
- fastmcp/contrib/mcp_mixin/mcp_mixin.py +14 -2
- fastmcp/dependencies.py +25 -0
- fastmcp/experimental/sampling/handlers/openai.py +3 -3
- fastmcp/experimental/server/openapi/__init__.py +20 -21
- fastmcp/experimental/utilities/openapi/__init__.py +16 -47
- fastmcp/mcp_config.py +3 -4
- fastmcp/prompts/__init__.py +1 -1
- fastmcp/prompts/prompt.py +54 -51
- fastmcp/prompts/prompt_manager.py +16 -101
- fastmcp/resources/__init__.py +5 -5
- fastmcp/resources/resource.py +43 -21
- fastmcp/resources/resource_manager.py +9 -168
- fastmcp/resources/template.py +161 -61
- fastmcp/resources/types.py +30 -24
- fastmcp/server/__init__.py +1 -1
- fastmcp/server/auth/__init__.py +9 -14
- fastmcp/server/auth/auth.py +197 -46
- fastmcp/server/auth/handlers/authorize.py +326 -0
- fastmcp/server/auth/jwt_issuer.py +236 -0
- fastmcp/server/auth/middleware.py +96 -0
- fastmcp/server/auth/oauth_proxy.py +1469 -298
- fastmcp/server/auth/oidc_proxy.py +91 -20
- fastmcp/server/auth/providers/auth0.py +40 -21
- fastmcp/server/auth/providers/aws.py +29 -3
- fastmcp/server/auth/providers/azure.py +312 -131
- fastmcp/server/auth/providers/debug.py +114 -0
- fastmcp/server/auth/providers/descope.py +86 -29
- fastmcp/server/auth/providers/discord.py +308 -0
- fastmcp/server/auth/providers/github.py +29 -8
- fastmcp/server/auth/providers/google.py +48 -9
- fastmcp/server/auth/providers/in_memory.py +29 -5
- fastmcp/server/auth/providers/introspection.py +281 -0
- fastmcp/server/auth/providers/jwt.py +48 -31
- fastmcp/server/auth/providers/oci.py +233 -0
- fastmcp/server/auth/providers/scalekit.py +238 -0
- fastmcp/server/auth/providers/supabase.py +188 -0
- fastmcp/server/auth/providers/workos.py +35 -17
- fastmcp/server/context.py +236 -116
- fastmcp/server/dependencies.py +503 -18
- fastmcp/server/elicitation.py +286 -48
- fastmcp/server/event_store.py +177 -0
- fastmcp/server/http.py +71 -20
- fastmcp/server/low_level.py +165 -2
- fastmcp/server/middleware/__init__.py +1 -1
- fastmcp/server/middleware/caching.py +476 -0
- fastmcp/server/middleware/error_handling.py +14 -10
- fastmcp/server/middleware/logging.py +50 -39
- fastmcp/server/middleware/middleware.py +29 -16
- fastmcp/server/middleware/rate_limiting.py +3 -3
- fastmcp/server/middleware/tool_injection.py +116 -0
- fastmcp/server/openapi/__init__.py +35 -0
- fastmcp/{experimental/server → server}/openapi/components.py +15 -10
- fastmcp/{experimental/server → server}/openapi/routing.py +3 -3
- fastmcp/{experimental/server → server}/openapi/server.py +6 -5
- fastmcp/server/proxy.py +72 -48
- fastmcp/server/server.py +1415 -733
- fastmcp/server/tasks/__init__.py +21 -0
- fastmcp/server/tasks/capabilities.py +22 -0
- fastmcp/server/tasks/config.py +89 -0
- fastmcp/server/tasks/converters.py +205 -0
- fastmcp/server/tasks/handlers.py +356 -0
- fastmcp/server/tasks/keys.py +93 -0
- fastmcp/server/tasks/protocol.py +355 -0
- fastmcp/server/tasks/subscriptions.py +205 -0
- fastmcp/settings.py +125 -113
- fastmcp/tools/__init__.py +1 -1
- fastmcp/tools/tool.py +138 -55
- fastmcp/tools/tool_manager.py +30 -112
- fastmcp/tools/tool_transform.py +12 -21
- fastmcp/utilities/cli.py +67 -28
- fastmcp/utilities/components.py +10 -5
- fastmcp/utilities/inspect.py +79 -23
- fastmcp/utilities/json_schema.py +4 -4
- fastmcp/utilities/json_schema_type.py +8 -8
- fastmcp/utilities/logging.py +118 -8
- fastmcp/utilities/mcp_config.py +1 -2
- fastmcp/utilities/mcp_server_config/__init__.py +3 -3
- fastmcp/utilities/mcp_server_config/v1/environments/base.py +1 -2
- fastmcp/utilities/mcp_server_config/v1/environments/uv.py +6 -6
- fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +5 -5
- fastmcp/utilities/mcp_server_config/v1/schema.json +3 -0
- fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -1
- fastmcp/{experimental/utilities → utilities}/openapi/README.md +7 -35
- fastmcp/utilities/openapi/__init__.py +63 -0
- fastmcp/{experimental/utilities → utilities}/openapi/director.py +14 -15
- fastmcp/{experimental/utilities → utilities}/openapi/formatters.py +5 -5
- fastmcp/{experimental/utilities → utilities}/openapi/json_schema_converter.py +7 -3
- fastmcp/{experimental/utilities → utilities}/openapi/parser.py +37 -16
- fastmcp/utilities/tests.py +92 -5
- fastmcp/utilities/types.py +86 -16
- fastmcp/utilities/ui.py +626 -0
- {fastmcp-2.12.5.dist-info → fastmcp-2.14.0.dist-info}/METADATA +24 -15
- fastmcp-2.14.0.dist-info/RECORD +156 -0
- {fastmcp-2.12.5.dist-info → fastmcp-2.14.0.dist-info}/WHEEL +1 -1
- fastmcp/cli/claude.py +0 -135
- fastmcp/server/auth/providers/bearer.py +0 -25
- fastmcp/server/openapi.py +0 -1083
- fastmcp/utilities/openapi.py +0 -1568
- fastmcp/utilities/storage.py +0 -204
- fastmcp-2.12.5.dist-info/RECORD +0 -134
- fastmcp/{experimental/server → server}/openapi/README.md +0 -0
- fastmcp/{experimental/utilities → utilities}/openapi/models.py +3 -3
- fastmcp/{experimental/utilities → utilities}/openapi/schemas.py +2 -2
- {fastmcp-2.12.5.dist-info → fastmcp-2.14.0.dist-info}/entry_points.txt +0 -0
- {fastmcp-2.12.5.dist-info → fastmcp-2.14.0.dist-info}/licenses/LICENSE +0 -0
fastmcp/utilities/storage.py
DELETED
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
"""Key-value storage utilities for persistent data management."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import json
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
from typing import Any, Protocol
|
|
8
|
-
|
|
9
|
-
import pydantic_core
|
|
10
|
-
|
|
11
|
-
from fastmcp.utilities.logging import get_logger
|
|
12
|
-
|
|
13
|
-
logger = get_logger(__name__)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class KVStorage(Protocol):
|
|
17
|
-
"""Protocol for key-value storage of JSON data."""
|
|
18
|
-
|
|
19
|
-
async def get(self, key: str) -> dict[str, Any] | None:
|
|
20
|
-
"""Get a JSON dict by key."""
|
|
21
|
-
...
|
|
22
|
-
|
|
23
|
-
async def set(self, key: str, value: dict[str, Any]) -> None:
|
|
24
|
-
"""Store a JSON dict by key."""
|
|
25
|
-
...
|
|
26
|
-
|
|
27
|
-
async def delete(self, key: str) -> None:
|
|
28
|
-
"""Delete a value by key."""
|
|
29
|
-
...
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class JSONFileStorage:
|
|
33
|
-
"""File-based key-value storage for JSON data with automatic metadata tracking.
|
|
34
|
-
|
|
35
|
-
Each key-value pair is stored as a separate JSON file on disk.
|
|
36
|
-
Keys are sanitized to be filesystem-safe.
|
|
37
|
-
|
|
38
|
-
The storage automatically wraps all data with metadata:
|
|
39
|
-
- timestamp: Timestamp when the entry was last written
|
|
40
|
-
|
|
41
|
-
Args:
|
|
42
|
-
cache_dir: Directory for storing JSON files
|
|
43
|
-
"""
|
|
44
|
-
|
|
45
|
-
def __init__(self, cache_dir: Path):
|
|
46
|
-
"""Initialize JSON file storage."""
|
|
47
|
-
self.cache_dir = cache_dir
|
|
48
|
-
self.cache_dir.mkdir(exist_ok=True, parents=True)
|
|
49
|
-
|
|
50
|
-
def _get_safe_key(self, key: str) -> str:
|
|
51
|
-
"""Convert key to filesystem-safe string."""
|
|
52
|
-
safe_key = key
|
|
53
|
-
|
|
54
|
-
# Replace problematic characters with underscores
|
|
55
|
-
for char in [".", "/", "\\", ":", "*", "?", '"', "<", ">", "|", " "]:
|
|
56
|
-
safe_key = safe_key.replace(char, "_")
|
|
57
|
-
|
|
58
|
-
# Compress multiple underscores into one
|
|
59
|
-
while "__" in safe_key:
|
|
60
|
-
safe_key = safe_key.replace("__", "_")
|
|
61
|
-
|
|
62
|
-
# Strip leading and trailing underscores
|
|
63
|
-
safe_key = safe_key.strip("_")
|
|
64
|
-
|
|
65
|
-
return safe_key
|
|
66
|
-
|
|
67
|
-
def _get_file_path(self, key: str) -> Path:
|
|
68
|
-
"""Get the file path for a given key."""
|
|
69
|
-
safe_key = self._get_safe_key(key)
|
|
70
|
-
return self.cache_dir / f"{safe_key}.json"
|
|
71
|
-
|
|
72
|
-
async def get(self, key: str) -> dict[str, Any] | None:
|
|
73
|
-
"""Get a JSON dict from storage by key.
|
|
74
|
-
|
|
75
|
-
Args:
|
|
76
|
-
key: The key to retrieve
|
|
77
|
-
|
|
78
|
-
Returns:
|
|
79
|
-
The stored dict or None if not found
|
|
80
|
-
"""
|
|
81
|
-
path = self._get_file_path(key)
|
|
82
|
-
try:
|
|
83
|
-
wrapper = json.loads(path.read_text())
|
|
84
|
-
|
|
85
|
-
# Expect wrapped format with metadata
|
|
86
|
-
if not isinstance(wrapper, dict) or "data" not in wrapper:
|
|
87
|
-
logger.warning(f"Invalid storage format for key '{key}'")
|
|
88
|
-
return None
|
|
89
|
-
|
|
90
|
-
logger.debug(f"Loaded data for key '{key}'")
|
|
91
|
-
return wrapper["data"]
|
|
92
|
-
|
|
93
|
-
except FileNotFoundError:
|
|
94
|
-
logger.debug(f"No data found for key '{key}'")
|
|
95
|
-
return None
|
|
96
|
-
except json.JSONDecodeError as e:
|
|
97
|
-
logger.warning(f"Failed to load data for key '{key}': {e}")
|
|
98
|
-
return None
|
|
99
|
-
|
|
100
|
-
async def set(self, key: str, value: dict[str, Any]) -> None:
|
|
101
|
-
"""Store a JSON dict with metadata.
|
|
102
|
-
|
|
103
|
-
Args:
|
|
104
|
-
key: The key to store under
|
|
105
|
-
value: The dict to store
|
|
106
|
-
"""
|
|
107
|
-
import time
|
|
108
|
-
|
|
109
|
-
path = self._get_file_path(key)
|
|
110
|
-
current_time = time.time()
|
|
111
|
-
|
|
112
|
-
# Create wrapper with metadata
|
|
113
|
-
wrapper = {
|
|
114
|
-
"data": value,
|
|
115
|
-
"timestamp": current_time,
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
# Use pydantic_core for consistent JSON serialization
|
|
119
|
-
json_data = pydantic_core.to_json(wrapper, fallback=str)
|
|
120
|
-
path.write_bytes(json_data)
|
|
121
|
-
logger.debug(f"Saved data for key '{key}'")
|
|
122
|
-
|
|
123
|
-
async def delete(self, key: str) -> None:
|
|
124
|
-
"""Delete a value from storage.
|
|
125
|
-
|
|
126
|
-
Args:
|
|
127
|
-
key: The key to delete
|
|
128
|
-
"""
|
|
129
|
-
path = self._get_file_path(key)
|
|
130
|
-
if path.exists():
|
|
131
|
-
path.unlink()
|
|
132
|
-
logger.debug(f"Deleted data for key '{key}'")
|
|
133
|
-
|
|
134
|
-
async def cleanup_old_entries(
|
|
135
|
-
self,
|
|
136
|
-
max_age_seconds: int = 30 * 24 * 60 * 60, # 30 days default
|
|
137
|
-
) -> int:
|
|
138
|
-
"""Remove entries older than the specified age.
|
|
139
|
-
|
|
140
|
-
Uses the timestamp field to determine age.
|
|
141
|
-
|
|
142
|
-
Args:
|
|
143
|
-
max_age_seconds: Maximum age in seconds (default 30 days)
|
|
144
|
-
|
|
145
|
-
Returns:
|
|
146
|
-
Number of entries removed
|
|
147
|
-
"""
|
|
148
|
-
import time
|
|
149
|
-
|
|
150
|
-
current_time = time.time()
|
|
151
|
-
removed_count = 0
|
|
152
|
-
|
|
153
|
-
for json_file in self.cache_dir.glob("*.json"):
|
|
154
|
-
try:
|
|
155
|
-
# Read the file and check timestamp
|
|
156
|
-
wrapper = json.loads(json_file.read_text())
|
|
157
|
-
|
|
158
|
-
# Check wrapped format
|
|
159
|
-
if not isinstance(wrapper, dict) or "data" not in wrapper:
|
|
160
|
-
continue # Invalid format, skip
|
|
161
|
-
|
|
162
|
-
if "timestamp" not in wrapper:
|
|
163
|
-
continue # No timestamp field, skip
|
|
164
|
-
|
|
165
|
-
entry_age = current_time - wrapper["timestamp"]
|
|
166
|
-
if entry_age > max_age_seconds:
|
|
167
|
-
json_file.unlink()
|
|
168
|
-
removed_count += 1
|
|
169
|
-
logger.debug(
|
|
170
|
-
f"Removed old entry '{json_file.stem}' (age: {entry_age:.0f}s)"
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
except (json.JSONDecodeError, KeyError) as e:
|
|
174
|
-
logger.debug(f"Error reading {json_file.name}: {e}")
|
|
175
|
-
continue
|
|
176
|
-
|
|
177
|
-
if removed_count > 0:
|
|
178
|
-
logger.info(f"Cleaned up {removed_count} old entries from storage")
|
|
179
|
-
|
|
180
|
-
return removed_count
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
class InMemoryStorage:
|
|
184
|
-
"""In-memory key-value storage for JSON data.
|
|
185
|
-
|
|
186
|
-
Simple dict-based storage that doesn't persist across restarts.
|
|
187
|
-
Useful for testing or environments where file storage isn't available.
|
|
188
|
-
"""
|
|
189
|
-
|
|
190
|
-
def __init__(self):
|
|
191
|
-
"""Initialize in-memory storage."""
|
|
192
|
-
self._data: dict[str, dict[str, Any]] = {}
|
|
193
|
-
|
|
194
|
-
async def get(self, key: str) -> dict[str, Any] | None:
|
|
195
|
-
"""Get a JSON dict from memory by key."""
|
|
196
|
-
return self._data.get(key)
|
|
197
|
-
|
|
198
|
-
async def set(self, key: str, value: dict[str, Any]) -> None:
|
|
199
|
-
"""Store a JSON dict in memory."""
|
|
200
|
-
self._data[key] = value
|
|
201
|
-
|
|
202
|
-
async def delete(self, key: str) -> None:
|
|
203
|
-
"""Delete a value from memory."""
|
|
204
|
-
self._data.pop(key, None)
|
fastmcp-2.12.5.dist-info/RECORD
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
fastmcp/__init__.py,sha256=KX2d8UjlyJdYwock62tYV7vJSRwyxzrjq-jnU6Gre_c,1544
|
|
2
|
-
fastmcp/exceptions.py,sha256=-krEavxwddQau6T7MESCR4VjKNLfP9KHJrU1p3y72FU,744
|
|
3
|
-
fastmcp/mcp_config.py,sha256=zbli5c8hcUfxOlqYFBJXbogpVlXwtnCuJjTg3oTfmtQ,11375
|
|
4
|
-
fastmcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
fastmcp/settings.py,sha256=R3X0opNREwb0bpZs__qDpIIoiqXpWd6hm2U42hh_DAM,13341
|
|
6
|
-
fastmcp/cli/__init__.py,sha256=Ii284TNoG5lxTP40ETMGhHEq3lQZWxu9m9JuU57kUpQ,87
|
|
7
|
-
fastmcp/cli/claude.py,sha256=Z2mNoOdfGNvPSZVhbS2n52Thu9fNCxtJwju1pnTaN7c,4546
|
|
8
|
-
fastmcp/cli/cli.py,sha256=s5uIEKGOhImfDZc74v2ZYYrN2WHNxRyy7ouo265sCcM,29041
|
|
9
|
-
fastmcp/cli/run.py,sha256=lN1N3TdAWV2pFEiPe08Pk6ZkePoyAXaJ3MRpApkXcyI,6882
|
|
10
|
-
fastmcp/cli/install/__init__.py,sha256=FUrwjMVaxONgz1qO7suzJNz1xosRfR3TOHlr3Z77JXA,797
|
|
11
|
-
fastmcp/cli/install/claude_code.py,sha256=pIZXHJFv4lqj5V7Wr55fTjj9YDjBu0PBMBxPm_ww7Ow,7756
|
|
12
|
-
fastmcp/cli/install/claude_desktop.py,sha256=1skMjy07Z_4iQ1rMKO1L3Jl5hGsTIz8xdZTNG1tV2H0,6939
|
|
13
|
-
fastmcp/cli/install/cursor.py,sha256=eXJcI3u36eDDmLVeq49pK0R3cWA_iAtpYdO45tPDEgg,10749
|
|
14
|
-
fastmcp/cli/install/gemini_cli.py,sha256=rfKPn-lCMCvY9UpD6Q0ZnoCVMxfd-A5UD3DKuSLj-gY,7737
|
|
15
|
-
fastmcp/cli/install/mcp_json.py,sha256=7tYslUjbPMwWt1UoARJjnDRRFZjH_l1UWd5hNWwKA5c,5939
|
|
16
|
-
fastmcp/cli/install/shared.py,sha256=_1MNGCqf7BsAL6ntwA75wn86-0g-248ppQSAPQ8uTXk,5103
|
|
17
|
-
fastmcp/client/__init__.py,sha256=J-RcLU2WcnYnstXWoW01itGtAg7DEjvCsWyqQKQljoo,663
|
|
18
|
-
fastmcp/client/client.py,sha256=HIYvw9E4ZTPDyW5VAnPTeFDAj7pHV9_VEYlqb8Vpy50,35791
|
|
19
|
-
fastmcp/client/elicitation.py,sha256=VNWgeBe2KipLp9mCc-6AApmfYAU1OlH9_3JdskfW_Wc,2521
|
|
20
|
-
fastmcp/client/logging.py,sha256=uIC9aWGKqgTbxhRqkMBlnYfYjtanC1fqyWbRu5FY6AY,1670
|
|
21
|
-
fastmcp/client/messages.py,sha256=NIPjt-5js_DkI5BD4OVdTf6pz-nGjc2dtbgt-vAY234,4329
|
|
22
|
-
fastmcp/client/oauth_callback.py,sha256=qxSMg1duv_uCYbbNaiFjl9esSlWeiiHtYBWBdQcX27w,10248
|
|
23
|
-
fastmcp/client/progress.py,sha256=WjLLDbUKMsx8DK-fqO7AGsXb83ak-6BMrLvzzznGmcI,1043
|
|
24
|
-
fastmcp/client/roots.py,sha256=IxI_bHwHTmg6c2H-s1av1ZgrRnNDieHtYwdGFbzXT5c,2471
|
|
25
|
-
fastmcp/client/sampling.py,sha256=TXRj1Fs9lOk1wukhaHhPS__HGqpTieXSq2Rasj1F-e0,1819
|
|
26
|
-
fastmcp/client/transports.py,sha256=RLOqBKO8cphsbPC8FRk6hgrM_2yH2WyT6o5xmXf3DVI,38183
|
|
27
|
-
fastmcp/client/auth/__init__.py,sha256=4DNsfp4iaQeBcpds0JDdMn6Mmfud44stWLsret0sVKY,91
|
|
28
|
-
fastmcp/client/auth/bearer.py,sha256=MFEFqcH6u_V86msYiOsEFKN5ks1V9BnBNiPsPLHUTqo,399
|
|
29
|
-
fastmcp/client/auth/oauth.py,sha256=EEl5Td6wVvGFt_05Leh43-vvLSVnEspnuEYvE5CJGrA,16380
|
|
30
|
-
fastmcp/contrib/README.md,sha256=rKknYSI1T192UvSszqwwDlQ2eYQpxywrNTLoj177SYU,878
|
|
31
|
-
fastmcp/contrib/bulk_tool_caller/README.md,sha256=5aUUY1TSFKtz1pvTLSDqkUCkGkuqMfMZNsLeaNqEgAc,1960
|
|
32
|
-
fastmcp/contrib/bulk_tool_caller/__init__.py,sha256=xvGSSaUXTQrc31erBoi1Gh7BikgOliETDiYVTP3rLxY,75
|
|
33
|
-
fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py,sha256=2NcrGS59qvHo1lfbRaT8NSWfCxN66knciLxFvnGwCLY,4165
|
|
34
|
-
fastmcp/contrib/bulk_tool_caller/example.py,sha256=6og_8pCJN_CabworC5R82zPAwwwM-W7HNJLQQSnS3lU,319
|
|
35
|
-
fastmcp/contrib/component_manager/README.md,sha256=sTan1D51jzkPNnCQTxwd5JXGzWVy4DtkUjrUfNH3-F0,4457
|
|
36
|
-
fastmcp/contrib/component_manager/__init__.py,sha256=4bppVrCOSEepKmBRwVWN-ndu5BYAz1Kv2Z8yhjEUmlo,164
|
|
37
|
-
fastmcp/contrib/component_manager/component_manager.py,sha256=4R1FPVYjCr-j7Mn6OcbHH-psl9-JTdd1hgNZHasC52Y,6412
|
|
38
|
-
fastmcp/contrib/component_manager/component_service.py,sha256=QqJ4DgD8ppAEHopc_hn3Ir2HKs81wSyuCT7qFqW527E,8760
|
|
39
|
-
fastmcp/contrib/component_manager/example.py,sha256=N16OIHmQuR-LNEv7bkrv2rGdMs862Nc3AKKEPfw-6rU,1587
|
|
40
|
-
fastmcp/contrib/mcp_mixin/README.md,sha256=3sXD33lY1Bf3xpjSHOL-JngAjl0n8mC2FwKbdrGIDwE,4280
|
|
41
|
-
fastmcp/contrib/mcp_mixin/__init__.py,sha256=aw9IQ1ssNjCgws4ZNt8bkdpossAAGVAwwjBpMp9O5ZQ,153
|
|
42
|
-
fastmcp/contrib/mcp_mixin/example.py,sha256=GnunkXmtG5hLLTUsM8aW5ZURU52Z8vI4tNLl-fK7Dg0,1228
|
|
43
|
-
fastmcp/contrib/mcp_mixin/mcp_mixin.py,sha256=q039j0OOwlflMLqpqEpniBf828LwIaeXkY7LPub3rRU,10171
|
|
44
|
-
fastmcp/experimental/sampling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
-
fastmcp/experimental/sampling/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
-
fastmcp/experimental/sampling/handlers/base.py,sha256=mCPFj9ETc-Ro38R_pzx9rHVM2_EADCecScMkNWd6Tbs,714
|
|
47
|
-
fastmcp/experimental/sampling/handlers/openai.py,sha256=TUmIpao8LFz6BzXFG5v7JOS_CosgX6tCeGRUo1wdKvY,5753
|
|
48
|
-
fastmcp/experimental/server/openapi/README.md,sha256=1Mc1Ur15OxMn-wAPEa1rZIiNNSMdv9sboQ3YpvNpUXM,9886
|
|
49
|
-
fastmcp/experimental/server/openapi/__init__.py,sha256=f1Mc7dkuRRJb_6-3umSHuyuXtvXTzH72t8gw1GBHgZU,772
|
|
50
|
-
fastmcp/experimental/server/openapi/components.py,sha256=jp5xy0xkn14cFRk9FYlp3LpW-j44C0KcXvMQmdWVpB8,13237
|
|
51
|
-
fastmcp/experimental/server/openapi/routing.py,sha256=H_1RMaARucl8bfFT9-JJRDwrAfLJMm86y0giiWldVEc,4031
|
|
52
|
-
fastmcp/experimental/server/openapi/server.py,sha256=WQeUA3v69ZhrzN1-cbrDTC8EsaOXHwDSQT_NPgYrECk,16099
|
|
53
|
-
fastmcp/experimental/utilities/openapi/README.md,sha256=pOXftamuVXxEMlOt-JAfpuvHeRGauC3l46ntD1WzM-A,8604
|
|
54
|
-
fastmcp/experimental/utilities/openapi/__init__.py,sha256=4uba3nOrt8hAv1I91BWkg2hMo3O0VmYlSNG058xwmiA,1677
|
|
55
|
-
fastmcp/experimental/utilities/openapi/director.py,sha256=zoYlIp4KESC8UlfKvooEtyzSO15P8T6YMZp5qCV6PfU,8078
|
|
56
|
-
fastmcp/experimental/utilities/openapi/formatters.py,sha256=1RCd8DwPU8_4uF51pj8Qp3oSZkZmoxL5VUwxBzokAMg,15540
|
|
57
|
-
fastmcp/experimental/utilities/openapi/json_schema_converter.py,sha256=W_40IPyuYnstcYtGf--eyTquecmwpvFYBK0W-XQ7OAw,12921
|
|
58
|
-
fastmcp/experimental/utilities/openapi/models.py,sha256=tgqrHdTbiDfMjiaNVHW5ndbXJ5lg_sajK0S5u9JQL6A,2805
|
|
59
|
-
fastmcp/experimental/utilities/openapi/parser.py,sha256=nVlvQ7RV7q4az_hrcE8WfGI5GqREKb6mZ5ANMgDED08,33232
|
|
60
|
-
fastmcp/experimental/utilities/openapi/schemas.py,sha256=FE7aSgk3285X1okCh1ILLTxboQ-FCeFLyYZZ_jfejVI,23349
|
|
61
|
-
fastmcp/prompts/__init__.py,sha256=An8uMBUh9Hrb7qqcn_5_Hent7IOeSh7EA2IUVsIrtHc,179
|
|
62
|
-
fastmcp/prompts/prompt.py,sha256=Uo6NorQlGP1lvJh5-qK8jAvi4Mp4yDWkB5V4pzXMQYw,14235
|
|
63
|
-
fastmcp/prompts/prompt_manager.py,sha256=mv3ge3vqNQNIPwVT8Tkr7IaBSflYBajpfxfTZLuHZiw,7807
|
|
64
|
-
fastmcp/resources/__init__.py,sha256=y1iAuqx-GIrS1NqIYzKezIDiYyjNEzzHD35epHpMnXE,463
|
|
65
|
-
fastmcp/resources/resource.py,sha256=sWXqetS0X_u0bQOeMI-q9zVQvc29Qjz1hdxi7CjYmfE,6898
|
|
66
|
-
fastmcp/resources/resource_manager.py,sha256=sDfMrAx1cl2sTaKrTYW3k6gxr_O0QmH18n9v10zR47s,20355
|
|
67
|
-
fastmcp/resources/template.py,sha256=KljJyfeO6Q702woIKKr5C9ODK4ImebY2PyFgYbQP5rY,11188
|
|
68
|
-
fastmcp/resources/types.py,sha256=SiYNLnpXT-mHgNUrzqKUvXYUsY-V3gwJIrYdJfFwDDo,4868
|
|
69
|
-
fastmcp/server/__init__.py,sha256=bMD4aQD4yJqLz7-mudoNsyeV8UgQfRAg3PRwPvwTEds,119
|
|
70
|
-
fastmcp/server/context.py,sha256=UAXqW2kx3_RTVXz-hQUt-oNpnL8RRhgJk6c3JSnaE0A,24568
|
|
71
|
-
fastmcp/server/dependencies.py,sha256=so60cBZc4QuiKP2Y4ajR_NPkIF5d_b5wp8U3-ZfZMEQ,3888
|
|
72
|
-
fastmcp/server/elicitation.py,sha256=gmP17CzLQVpGzU00Ks31TWxdS-OLL5wTX_W5xRzs1Cc,8777
|
|
73
|
-
fastmcp/server/http.py,sha256=rh18KPgGMFdKExrVZ-tFFBvyaAoTf925tm_a9ZVV9eM,10668
|
|
74
|
-
fastmcp/server/low_level.py,sha256=LNmc_nU_wx-fRG8OEHdLPKopZpovcrWlyAxJzKss3TA,1239
|
|
75
|
-
fastmcp/server/openapi.py,sha256=vm8A8Qy-jzXuxILJs-nPOJLwU2yB0YHDqVpz2HX-AqM,42198
|
|
76
|
-
fastmcp/server/proxy.py,sha256=y9h-49PIBNRh03HI3HcrY_lL8AMbKv45fyr2mAz3Vyo,25734
|
|
77
|
-
fastmcp/server/server.py,sha256=UTPqvfLWcYfn0d26uTsav_qwfNAXx-I9c9d_FXk0jus,90822
|
|
78
|
-
fastmcp/server/auth/__init__.py,sha256=GwoyosVxuWCPzFHaCnj6iFp9fulnp124G2gQfsnzcgc,695
|
|
79
|
-
fastmcp/server/auth/auth.py,sha256=bZpgCXdjsdDLS2hreivKFUhPpCDJLC0_k-fJYH1Bg9A,13096
|
|
80
|
-
fastmcp/server/auth/oauth_proxy.py,sha256=FuRnA07EV7Jd9mvxO4m9qntiQLjv6RycYPj9k20Mbuc,43638
|
|
81
|
-
fastmcp/server/auth/oidc_proxy.py,sha256=HvgBPuEkcA3iLDEb_fH0kMIjgleWfIz5BftJ-LYdj1A,13047
|
|
82
|
-
fastmcp/server/auth/redirect_validation.py,sha256=Jlhela9xpTbw4aWnQ04A5Z-TW0HYOC3f9BMsq3NXx1Q,2000
|
|
83
|
-
fastmcp/server/auth/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
|
-
fastmcp/server/auth/providers/auth0.py,sha256=A8jMqfz3o-RpOQ3-k70ad3JTN3YuWEwLYrlcBqdmlxw,6249
|
|
85
|
-
fastmcp/server/auth/providers/aws.py,sha256=PWqRgOgonL3HZXXNlMHruUBFSF3lficrMmJocjIC7K8,8921
|
|
86
|
-
fastmcp/server/auth/providers/azure.py,sha256=tprxHR6v9Ir8M-Fum3jxIFyguMVLgFawL6GGZirnos4,10158
|
|
87
|
-
fastmcp/server/auth/providers/bearer.py,sha256=iu4pUj7TF5pT1wPuAGzDuM6lt5WtzenBN3c0otUleQY,923
|
|
88
|
-
fastmcp/server/auth/providers/descope.py,sha256=-liMBDXP5W2TlaOhmiRF7_MHJF4TIh0Ga1ObGQRTi1U,6387
|
|
89
|
-
fastmcp/server/auth/providers/github.py,sha256=W-JtWTDpkJQeSZXrVgXA3yF-EL71OQ74vSDaC77n3nU,10793
|
|
90
|
-
fastmcp/server/auth/providers/google.py,sha256=HrVlvduWcGRAwFJfXoz-UvcHX0onBdx2TK661X4nP_Y,11967
|
|
91
|
-
fastmcp/server/auth/providers/in_memory.py,sha256=CFCfYWMIPUxHNF5Liqud6ksedbykKV-RILWZqTxh3MY,14245
|
|
92
|
-
fastmcp/server/auth/providers/jwt.py,sha256=hAV_QXIoD4wotW6iWm0k378_mjMtkwWVqWEp6Zc--HE,19525
|
|
93
|
-
fastmcp/server/auth/providers/workos.py,sha256=81iEjr7bebYWTcMs6uRoVy4iSQGpR77zCWLRPgcB2gQ,15640
|
|
94
|
-
fastmcp/server/middleware/__init__.py,sha256=vh5C9ubN6q-y5QND32P4mQ4zDT89C7XYK39yqhELNAk,155
|
|
95
|
-
fastmcp/server/middleware/error_handling.py,sha256=SoDatr9i3T2qSIUbSEGWrOnu4WPPyMDymnsF5GR_BiE,7572
|
|
96
|
-
fastmcp/server/middleware/logging.py,sha256=z0S34sGb5WOWCdXYOD0InxsjykqxqRi-ubTTDGSFxrY,9177
|
|
97
|
-
fastmcp/server/middleware/middleware.py,sha256=JV0LuTYnSAxbRY0zwm2z3OSBGjwI9wWnFM8MdEmj0Qw,6147
|
|
98
|
-
fastmcp/server/middleware/rate_limiting.py,sha256=VTrCoQFmWCm0BxwOrNfG21CBFDDOKJT7IiSEjpJgmPA,7921
|
|
99
|
-
fastmcp/server/middleware/timing.py,sha256=lL_xc-ErLD5lplfvd5-HIyWEbZhgNBYkcQ74KFXAMkA,5591
|
|
100
|
-
fastmcp/server/sampling/handler.py,sha256=yjLzvxlGllE-EY4bc6djsijEmwMT24PCpV6vJl-sPcI,580
|
|
101
|
-
fastmcp/tools/__init__.py,sha256=vzqb-Y7Kf0d5T0aOsld-O-FA8kD7-4uFExChewFHEzY,201
|
|
102
|
-
fastmcp/tools/tool.py,sha256=iG1OoOrml1U_m9NUOh_x6f5RYcprJdjjNnx1T5n-YsE,19885
|
|
103
|
-
fastmcp/tools/tool_manager.py,sha256=xOm5XFbygUg2cW8jIiwhsgAdUA14wDMoUIvkWKL3LOU,9186
|
|
104
|
-
fastmcp/tools/tool_transform.py,sha256=v5pgBddBacrryED_bSBOBe3jplInBE30W949_RxUzbA,38447
|
|
105
|
-
fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
|
|
106
|
-
fastmcp/utilities/auth.py,sha256=ZVHkNb4YBpLE1EmmFyhvFB2qfWDZdEYNH9TRI9jylOE,1140
|
|
107
|
-
fastmcp/utilities/cli.py,sha256=NZbERkcatjKxgyE0sFT6g6tghhWkzz0QTI2u_LaQGXo,8662
|
|
108
|
-
fastmcp/utilities/components.py,sha256=ZZQuseI_880WjQZAXYPhCi70u8-bBANYgZHj1u67Nks,5802
|
|
109
|
-
fastmcp/utilities/exceptions.py,sha256=7Z9j5IzM5rT27BC1Mcn8tkS-bjqCYqMKwb2MMTaxJYU,1350
|
|
110
|
-
fastmcp/utilities/http.py,sha256=1ns1ymBS-WSxbZjGP6JYjSO52Wa_ls4j4WbnXiupoa4,245
|
|
111
|
-
fastmcp/utilities/inspect.py,sha256=UYQtU1gT_4iKev9iDjFHor61dHdPGugDplUq2ZsQS40,15575
|
|
112
|
-
fastmcp/utilities/json_schema.py,sha256=jR-J_6IKVYe3VCwgrDLwiKJOGTdekvgbQJWXnEKJLHs,8824
|
|
113
|
-
fastmcp/utilities/json_schema_type.py,sha256=SX-qEZXC-sgUflOuIi3oi6jeCvIky3QS6m3Riihq6Xc,22273
|
|
114
|
-
fastmcp/utilities/logging.py,sha256=3peqa3ShgcxvuPrSE337dTLCtCyC16sn1iY2FBTFYko,3477
|
|
115
|
-
fastmcp/utilities/mcp_config.py,sha256=qATTXMGiYET-7PflOixQOgiw3aOizX-RlloRjAo7nwI,1796
|
|
116
|
-
fastmcp/utilities/openapi.py,sha256=mfkY2XfWAmAOlKexArlrmDdD0Tkdqcn4TshsATaxB_o,63304
|
|
117
|
-
fastmcp/utilities/storage.py,sha256=tNjiBjwrsibwuN-iD0ZScq0v--tq1ESMhIRW2NK7U_8,6230
|
|
118
|
-
fastmcp/utilities/tests.py,sha256=Hnq4fBsYjoTR0X3Omg2x4_34g8HjIRg3LlPlyrnq1Oc,6473
|
|
119
|
-
fastmcp/utilities/types.py,sha256=dZ9dw5U1gAOJsERODSlVF1Ua6q7XBAQaD7SF2K_H38w,14751
|
|
120
|
-
fastmcp/utilities/mcp_server_config/__init__.py,sha256=qbfd0c6aBpi0_SVgwt4IQCQ9siqqxmr9PWSYGiPDJqE,791
|
|
121
|
-
fastmcp/utilities/mcp_server_config/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
122
|
-
fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py,sha256=bAkbUv1e7iFvX18qxp91l6NIDMnmRcLaYnroDKoyGOI,15372
|
|
123
|
-
fastmcp/utilities/mcp_server_config/v1/schema.json,sha256=uI7hQuF-sFDi4Zj5Quu5PeAPL6ZjDPifrt-pI0gKWTU,8504
|
|
124
|
-
fastmcp/utilities/mcp_server_config/v1/environments/__init__.py,sha256=Tkv0dmJ6tKKotOBo-tho09QVdvEjy37iBsvBbEwH0EA,256
|
|
125
|
-
fastmcp/utilities/mcp_server_config/v1/environments/base.py,sha256=FkrUsESEdW5akyn_FeR4tQB6Vlj7dO9VFcCj0YLCghQ,845
|
|
126
|
-
fastmcp/utilities/mcp_server_config/v1/environments/uv.py,sha256=UzexA4kxuABtb2BZX8u6RYyrCd5xvW_7FiBjmgR47dc,9722
|
|
127
|
-
fastmcp/utilities/mcp_server_config/v1/sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
-
fastmcp/utilities/mcp_server_config/v1/sources/base.py,sha256=KWunc5peDLFdSdLX8l3UI9SNxtN-KNq2FOXAZ7XD62c,980
|
|
129
|
-
fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py,sha256=eFX47XNXz2oKHW8MZvx60dqyHkBxdg2FMOrHcyAS28g,8106
|
|
130
|
-
fastmcp-2.12.5.dist-info/METADATA,sha256=2yo9Wg9PoadDF70pJDq9KeyG0p6KPWM20A81kItgyOA,19728
|
|
131
|
-
fastmcp-2.12.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
132
|
-
fastmcp-2.12.5.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
|
|
133
|
-
fastmcp-2.12.5.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
134
|
-
fastmcp-2.12.5.dist-info/RECORD,,
|
|
File without changes
|
|
@@ -79,10 +79,10 @@ class HTTPRoute(FastMCPBaseModel):
|
|
|
79
79
|
# Export public symbols
|
|
80
80
|
__all__ = [
|
|
81
81
|
"HTTPRoute",
|
|
82
|
+
"HttpMethod",
|
|
83
|
+
"JsonSchema",
|
|
82
84
|
"ParameterInfo",
|
|
85
|
+
"ParameterLocation",
|
|
83
86
|
"RequestBodyInfo",
|
|
84
87
|
"ResponseInfo",
|
|
85
|
-
"HttpMethod",
|
|
86
|
-
"ParameterLocation",
|
|
87
|
-
"JsonSchema",
|
|
88
88
|
]
|
|
@@ -585,9 +585,9 @@ def extract_output_schema_from_responses(
|
|
|
585
585
|
|
|
586
586
|
# Export public symbols
|
|
587
587
|
__all__ = [
|
|
588
|
-
"clean_schema_for_display",
|
|
589
588
|
"_combine_schemas",
|
|
590
589
|
"_combine_schemas_and_map_params",
|
|
591
|
-
"extract_output_schema_from_responses",
|
|
592
590
|
"_make_optional_parameter_nullable",
|
|
591
|
+
"clean_schema_for_display",
|
|
592
|
+
"extract_output_schema_from_responses",
|
|
593
593
|
]
|
|
File without changes
|
|
File without changes
|