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.
Files changed (133) hide show
  1. fastmcp/__init__.py +2 -23
  2. fastmcp/cli/__init__.py +0 -3
  3. fastmcp/cli/__main__.py +5 -0
  4. fastmcp/cli/cli.py +19 -33
  5. fastmcp/cli/install/claude_code.py +6 -6
  6. fastmcp/cli/install/claude_desktop.py +3 -3
  7. fastmcp/cli/install/cursor.py +18 -12
  8. fastmcp/cli/install/gemini_cli.py +3 -3
  9. fastmcp/cli/install/mcp_json.py +3 -3
  10. fastmcp/cli/install/shared.py +0 -15
  11. fastmcp/cli/run.py +13 -8
  12. fastmcp/cli/tasks.py +110 -0
  13. fastmcp/client/__init__.py +9 -9
  14. fastmcp/client/auth/oauth.py +123 -225
  15. fastmcp/client/client.py +697 -95
  16. fastmcp/client/elicitation.py +11 -5
  17. fastmcp/client/logging.py +18 -14
  18. fastmcp/client/messages.py +7 -5
  19. fastmcp/client/oauth_callback.py +85 -171
  20. fastmcp/client/roots.py +2 -1
  21. fastmcp/client/sampling.py +1 -1
  22. fastmcp/client/tasks.py +614 -0
  23. fastmcp/client/transports.py +117 -30
  24. fastmcp/contrib/component_manager/__init__.py +1 -1
  25. fastmcp/contrib/component_manager/component_manager.py +2 -2
  26. fastmcp/contrib/component_manager/component_service.py +10 -26
  27. fastmcp/contrib/mcp_mixin/README.md +32 -1
  28. fastmcp/contrib/mcp_mixin/__init__.py +2 -2
  29. fastmcp/contrib/mcp_mixin/mcp_mixin.py +14 -2
  30. fastmcp/dependencies.py +25 -0
  31. fastmcp/experimental/sampling/handlers/openai.py +3 -3
  32. fastmcp/experimental/server/openapi/__init__.py +20 -21
  33. fastmcp/experimental/utilities/openapi/__init__.py +16 -47
  34. fastmcp/mcp_config.py +3 -4
  35. fastmcp/prompts/__init__.py +1 -1
  36. fastmcp/prompts/prompt.py +54 -51
  37. fastmcp/prompts/prompt_manager.py +16 -101
  38. fastmcp/resources/__init__.py +5 -5
  39. fastmcp/resources/resource.py +43 -21
  40. fastmcp/resources/resource_manager.py +9 -168
  41. fastmcp/resources/template.py +161 -61
  42. fastmcp/resources/types.py +30 -24
  43. fastmcp/server/__init__.py +1 -1
  44. fastmcp/server/auth/__init__.py +9 -14
  45. fastmcp/server/auth/auth.py +197 -46
  46. fastmcp/server/auth/handlers/authorize.py +326 -0
  47. fastmcp/server/auth/jwt_issuer.py +236 -0
  48. fastmcp/server/auth/middleware.py +96 -0
  49. fastmcp/server/auth/oauth_proxy.py +1469 -298
  50. fastmcp/server/auth/oidc_proxy.py +91 -20
  51. fastmcp/server/auth/providers/auth0.py +40 -21
  52. fastmcp/server/auth/providers/aws.py +29 -3
  53. fastmcp/server/auth/providers/azure.py +312 -131
  54. fastmcp/server/auth/providers/debug.py +114 -0
  55. fastmcp/server/auth/providers/descope.py +86 -29
  56. fastmcp/server/auth/providers/discord.py +308 -0
  57. fastmcp/server/auth/providers/github.py +29 -8
  58. fastmcp/server/auth/providers/google.py +48 -9
  59. fastmcp/server/auth/providers/in_memory.py +29 -5
  60. fastmcp/server/auth/providers/introspection.py +281 -0
  61. fastmcp/server/auth/providers/jwt.py +48 -31
  62. fastmcp/server/auth/providers/oci.py +233 -0
  63. fastmcp/server/auth/providers/scalekit.py +238 -0
  64. fastmcp/server/auth/providers/supabase.py +188 -0
  65. fastmcp/server/auth/providers/workos.py +35 -17
  66. fastmcp/server/context.py +236 -116
  67. fastmcp/server/dependencies.py +503 -18
  68. fastmcp/server/elicitation.py +286 -48
  69. fastmcp/server/event_store.py +177 -0
  70. fastmcp/server/http.py +71 -20
  71. fastmcp/server/low_level.py +165 -2
  72. fastmcp/server/middleware/__init__.py +1 -1
  73. fastmcp/server/middleware/caching.py +476 -0
  74. fastmcp/server/middleware/error_handling.py +14 -10
  75. fastmcp/server/middleware/logging.py +50 -39
  76. fastmcp/server/middleware/middleware.py +29 -16
  77. fastmcp/server/middleware/rate_limiting.py +3 -3
  78. fastmcp/server/middleware/tool_injection.py +116 -0
  79. fastmcp/server/openapi/__init__.py +35 -0
  80. fastmcp/{experimental/server → server}/openapi/components.py +15 -10
  81. fastmcp/{experimental/server → server}/openapi/routing.py +3 -3
  82. fastmcp/{experimental/server → server}/openapi/server.py +6 -5
  83. fastmcp/server/proxy.py +72 -48
  84. fastmcp/server/server.py +1415 -733
  85. fastmcp/server/tasks/__init__.py +21 -0
  86. fastmcp/server/tasks/capabilities.py +22 -0
  87. fastmcp/server/tasks/config.py +89 -0
  88. fastmcp/server/tasks/converters.py +205 -0
  89. fastmcp/server/tasks/handlers.py +356 -0
  90. fastmcp/server/tasks/keys.py +93 -0
  91. fastmcp/server/tasks/protocol.py +355 -0
  92. fastmcp/server/tasks/subscriptions.py +205 -0
  93. fastmcp/settings.py +125 -113
  94. fastmcp/tools/__init__.py +1 -1
  95. fastmcp/tools/tool.py +138 -55
  96. fastmcp/tools/tool_manager.py +30 -112
  97. fastmcp/tools/tool_transform.py +12 -21
  98. fastmcp/utilities/cli.py +67 -28
  99. fastmcp/utilities/components.py +10 -5
  100. fastmcp/utilities/inspect.py +79 -23
  101. fastmcp/utilities/json_schema.py +4 -4
  102. fastmcp/utilities/json_schema_type.py +8 -8
  103. fastmcp/utilities/logging.py +118 -8
  104. fastmcp/utilities/mcp_config.py +1 -2
  105. fastmcp/utilities/mcp_server_config/__init__.py +3 -3
  106. fastmcp/utilities/mcp_server_config/v1/environments/base.py +1 -2
  107. fastmcp/utilities/mcp_server_config/v1/environments/uv.py +6 -6
  108. fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +5 -5
  109. fastmcp/utilities/mcp_server_config/v1/schema.json +3 -0
  110. fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -1
  111. fastmcp/{experimental/utilities → utilities}/openapi/README.md +7 -35
  112. fastmcp/utilities/openapi/__init__.py +63 -0
  113. fastmcp/{experimental/utilities → utilities}/openapi/director.py +14 -15
  114. fastmcp/{experimental/utilities → utilities}/openapi/formatters.py +5 -5
  115. fastmcp/{experimental/utilities → utilities}/openapi/json_schema_converter.py +7 -3
  116. fastmcp/{experimental/utilities → utilities}/openapi/parser.py +37 -16
  117. fastmcp/utilities/tests.py +92 -5
  118. fastmcp/utilities/types.py +86 -16
  119. fastmcp/utilities/ui.py +626 -0
  120. {fastmcp-2.12.5.dist-info → fastmcp-2.14.0.dist-info}/METADATA +24 -15
  121. fastmcp-2.14.0.dist-info/RECORD +156 -0
  122. {fastmcp-2.12.5.dist-info → fastmcp-2.14.0.dist-info}/WHEEL +1 -1
  123. fastmcp/cli/claude.py +0 -135
  124. fastmcp/server/auth/providers/bearer.py +0 -25
  125. fastmcp/server/openapi.py +0 -1083
  126. fastmcp/utilities/openapi.py +0 -1568
  127. fastmcp/utilities/storage.py +0 -204
  128. fastmcp-2.12.5.dist-info/RECORD +0 -134
  129. fastmcp/{experimental/server → server}/openapi/README.md +0 -0
  130. fastmcp/{experimental/utilities → utilities}/openapi/models.py +3 -3
  131. fastmcp/{experimental/utilities → utilities}/openapi/schemas.py +2 -2
  132. {fastmcp-2.12.5.dist-info → fastmcp-2.14.0.dist-info}/entry_points.txt +0 -0
  133. {fastmcp-2.12.5.dist-info → fastmcp-2.14.0.dist-info}/licenses/LICENSE +0 -0
@@ -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)
@@ -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,,
@@ -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
  ]