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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.14.0
|
|
4
4
|
Summary: The fast, Pythonic way to build MCP servers and clients.
|
|
5
5
|
Project-URL: Homepage, https://gofastmcp.com
|
|
6
6
|
Project-URL: Repository, https://github.com/jlowin/fastmcp
|
|
@@ -14,24 +14,28 @@ Classifier: License :: OSI Approved :: Apache Software License
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.10
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
17
18
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
19
|
Classifier: Typing :: Typed
|
|
19
20
|
Requires-Python: >=3.10
|
|
20
|
-
Requires-Dist: authlib>=1.5
|
|
21
|
-
Requires-Dist: cyclopts>=
|
|
21
|
+
Requires-Dist: authlib>=1.6.5
|
|
22
|
+
Requires-Dist: cyclopts>=4.0.0
|
|
22
23
|
Requires-Dist: exceptiongroup>=1.2.2
|
|
23
24
|
Requires-Dist: httpx>=0.28.1
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
25
|
+
Requires-Dist: jsonschema-path>=0.3.4
|
|
26
|
+
Requires-Dist: mcp>=1.23.1
|
|
26
27
|
Requires-Dist: openapi-pydantic>=0.5.1
|
|
28
|
+
Requires-Dist: platformdirs>=4.0.0
|
|
29
|
+
Requires-Dist: py-key-value-aio[disk,keyring,memory]<0.4.0,>=0.3.0
|
|
27
30
|
Requires-Dist: pydantic[email]>=2.11.7
|
|
31
|
+
Requires-Dist: pydocket>=0.15.2
|
|
28
32
|
Requires-Dist: pyperclip>=1.9.0
|
|
29
33
|
Requires-Dist: python-dotenv>=1.1.0
|
|
30
34
|
Requires-Dist: rich>=13.9.4
|
|
35
|
+
Requires-Dist: uvicorn>=0.35
|
|
36
|
+
Requires-Dist: websockets>=15.0.1
|
|
31
37
|
Provides-Extra: openai
|
|
32
38
|
Requires-Dist: openai>=1.102.0; extra == 'openai'
|
|
33
|
-
Provides-Extra: websockets
|
|
34
|
-
Requires-Dist: websockets>=15.0.1; extra == 'websockets'
|
|
35
39
|
Description-Content-Type: text/markdown
|
|
36
40
|
|
|
37
41
|
<div align="center">
|
|
@@ -51,6 +55,7 @@ Description-Content-Type: text/markdown
|
|
|
51
55
|
*Made with ☕️ by [Prefect](https://www.prefect.io/)*
|
|
52
56
|
|
|
53
57
|
[](https://gofastmcp.com)
|
|
58
|
+
[](https://discord.gg/uu8dJCgttd)
|
|
54
59
|
[](https://pypi.org/project/fastmcp)
|
|
55
60
|
[](https://github.com/jlowin/fastmcp/actions/workflows/run-tests.yml)
|
|
56
61
|
[](https://github.com/jlowin/fastmcp/blob/main/LICENSE)
|
|
@@ -106,6 +111,8 @@ There are two ways to access the LLM-friendly documentation:
|
|
|
106
111
|
- [`llms.txt`](https://gofastmcp.com/llms.txt) is essentially a sitemap, listing all the pages in the documentation.
|
|
107
112
|
- [`llms-full.txt`](https://gofastmcp.com/llms-full.txt) contains the entire documentation. Note this may exceed the context window of your LLM.
|
|
108
113
|
|
|
114
|
+
**Community:** Join our [Discord server](https://discord.gg/uu8dJCgttd) to connect with other FastMCP developers and share what you're building.
|
|
115
|
+
|
|
109
116
|
---
|
|
110
117
|
|
|
111
118
|
<!-- omit in toc -->
|
|
@@ -176,6 +183,8 @@ uv pip install fastmcp
|
|
|
176
183
|
|
|
177
184
|
For full installation instructions, including verification, upgrading from the official MCPSDK, and developer setup, see the [**Installation Guide**](https://gofastmcp.com/getting-started/installation).
|
|
178
185
|
|
|
186
|
+
**Dependency Licensing:** FastMCP depends on Cyclopts for CLI functionality. Cyclopts v4 includes docutils as a transitive dependency, which has complex licensing that may trigger compliance reviews in some organizations. If this is a concern, you can install Cyclopts v5 alpha (`pip install "cyclopts>=5.0.0a1"`) which removes this dependency, or wait for the stable v5 release. See [this issue](https://github.com/BrianPugh/cyclopts/issues/672) for details.
|
|
187
|
+
|
|
179
188
|
## Core Concepts
|
|
180
189
|
|
|
181
190
|
These are the building blocks for creating MCP servers and clients with FastMCP.
|
|
@@ -191,7 +200,7 @@ from fastmcp import FastMCP
|
|
|
191
200
|
mcp = FastMCP(name="MyAssistantServer")
|
|
192
201
|
```
|
|
193
202
|
|
|
194
|
-
Learn more in the [**FastMCP Server Documentation**](https://gofastmcp.com/servers/
|
|
203
|
+
Learn more in the [**FastMCP Server Documentation**](https://gofastmcp.com/servers/server).
|
|
195
204
|
|
|
196
205
|
### Tools
|
|
197
206
|
|
|
@@ -244,7 +253,6 @@ Access MCP session capabilities within your tools, resources, or prompts by addi
|
|
|
244
253
|
|
|
245
254
|
- **Logging:** Log messages to MCP clients with `ctx.info()`, `ctx.error()`, etc.
|
|
246
255
|
- **LLM Sampling:** Use `ctx.sample()` to request completions from the client's LLM.
|
|
247
|
-
- **HTTP Request:** Use `ctx.http_request()` to make HTTP requests to other servers.
|
|
248
256
|
- **Resource Access:** Use `ctx.read_resource()` to access resources on the server
|
|
249
257
|
- **Progress Reporting:** Use `ctx.report_progress()` to report progress to the client.
|
|
250
258
|
- and more...
|
|
@@ -348,13 +356,14 @@ FastMCP provides comprehensive authentication support that sets it apart from ba
|
|
|
348
356
|
- **Auth0**
|
|
349
357
|
- **WorkOS**
|
|
350
358
|
- **Descope**
|
|
359
|
+
- **Discord**
|
|
351
360
|
- **JWT/Custom**
|
|
352
361
|
- **API Keys**
|
|
353
362
|
|
|
354
363
|
Protecting a server takes just two lines:
|
|
355
364
|
|
|
356
365
|
```python
|
|
357
|
-
from fastmcp.server.auth import GoogleProvider
|
|
366
|
+
from fastmcp.server.auth.providers.google import GoogleProvider
|
|
358
367
|
|
|
359
368
|
auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com")
|
|
360
369
|
mcp = FastMCP("Protected Server", auth=auth)
|
|
@@ -515,20 +524,20 @@ uv run pytest --cov=src --cov=examples --cov-report=html
|
|
|
515
524
|
|
|
516
525
|
### Static Checks
|
|
517
526
|
|
|
518
|
-
FastMCP uses `
|
|
527
|
+
FastMCP uses `prek` for code formatting, linting, and type-checking. All PRs must pass these checks (they run automatically in CI).
|
|
519
528
|
|
|
520
529
|
Install the hooks locally:
|
|
521
530
|
|
|
522
531
|
```bash
|
|
523
|
-
uv run
|
|
532
|
+
uv run prek install
|
|
524
533
|
```
|
|
525
534
|
|
|
526
535
|
The hooks will now run automatically on `git commit`. You can also run them manually at any time:
|
|
527
536
|
|
|
528
537
|
```bash
|
|
529
|
-
|
|
538
|
+
prek run --all-files
|
|
530
539
|
# or via uv
|
|
531
|
-
uv run
|
|
540
|
+
uv run prek run --all-files
|
|
532
541
|
```
|
|
533
542
|
|
|
534
543
|
### Pull Requests
|
|
@@ -536,7 +545,7 @@ uv run pre-commit run --all-files
|
|
|
536
545
|
1. Fork the repository on GitHub.
|
|
537
546
|
2. Create a feature branch from `main`.
|
|
538
547
|
3. Make your changes, including tests and documentation updates.
|
|
539
|
-
4. Ensure tests and
|
|
548
|
+
4. Ensure tests and prek hooks pass.
|
|
540
549
|
5. Commit your changes and push to your fork.
|
|
541
550
|
6. Open a pull request against the `main` branch of `jlowin/fastmcp`.
|
|
542
551
|
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
fastmcp/__init__.py,sha256=aArtRHXrBhV3SDPbgjJ7Tm6dI2V9waLH3M4xpGTSmPw,827
|
|
2
|
+
fastmcp/dependencies.py,sha256=Un5S30WHJbAiIdjVjEeaQC7UcEVEkkyjf4EF7l4FYq0,513
|
|
3
|
+
fastmcp/exceptions.py,sha256=-krEavxwddQau6T7MESCR4VjKNLfP9KHJrU1p3y72FU,744
|
|
4
|
+
fastmcp/mcp_config.py,sha256=YXZ0piljrxFgPYEwYSwPw6IiPwU3Cwp2VzlT9CWxutc,11397
|
|
5
|
+
fastmcp/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
fastmcp/settings.py,sha256=565ICavv2ms1lCvGV4XS6VXIYJZyB0os3Ifsr03A6YA,13307
|
|
7
|
+
fastmcp/cli/__init__.py,sha256=Bo7WQWPBRQ6fqbYYPfbadefpXgl2h9gkdMaqTazGWyw,49
|
|
8
|
+
fastmcp/cli/__main__.py,sha256=cGU_smvfctQI9xEY13u7tTEwwUI4AUieikXXA7ykYhA,69
|
|
9
|
+
fastmcp/cli/cli.py,sha256=HQ7MpR_7sB-bgQKG1XOd8epS2RIv_CqdYdHT8mZLszI,28242
|
|
10
|
+
fastmcp/cli/run.py,sha256=HeaiHYcVY17JpHg4UjnIHkP5ttU0PNd1bZIL3brif8A,7047
|
|
11
|
+
fastmcp/cli/tasks.py,sha256=B57vy76d3ybdi4wmlODRCCFrte1GmhLKqYixzRkGUuw,3791
|
|
12
|
+
fastmcp/cli/install/__init__.py,sha256=FUrwjMVaxONgz1qO7suzJNz1xosRfR3TOHlr3Z77JXA,797
|
|
13
|
+
fastmcp/cli/install/claude_code.py,sha256=vGv8hbMUM6p5uQ1scy6E7Qxn0BZ2_INATF0xmSl5QWQ,7617
|
|
14
|
+
fastmcp/cli/install/claude_desktop.py,sha256=aX_BrH5ODEN6UPHdw-Gnh0r5g8TojvTA7trqQRCEdAw,6832
|
|
15
|
+
fastmcp/cli/install/cursor.py,sha256=0qSkKp4JuZj2dGOAsPph9XS_LswV8rQ8CqAuEx7TNhA,10685
|
|
16
|
+
fastmcp/cli/install/gemini_cli.py,sha256=G7NhKnH21893baQjmVbFpwRyMbYIq7bocPQz1CBUH_8,7630
|
|
17
|
+
fastmcp/cli/install/mcp_json.py,sha256=l7b0sWB10YlbcXtcwJv1X2iHEP9V9EwuuD63PyTMvXI,5832
|
|
18
|
+
fastmcp/cli/install/shared.py,sha256=Qf5VH0b6l66yyBzDYtZwbbESUDYn6k5oyb6u-xepPTI,4447
|
|
19
|
+
fastmcp/client/__init__.py,sha256=QHvSGJCLejQkQ4o070vsUdKNB8vUhxckBByvHjnteTQ,663
|
|
20
|
+
fastmcp/client/client.py,sha256=5TlUA6O3W1r0sLS19MHyVkK-GsWdNL2rzdbsyCCKFVw,59717
|
|
21
|
+
fastmcp/client/elicitation.py,sha256=KlLvZn4FpwC5S5iXNq79mtqtbrtUjXyked-l-pZk6js,2878
|
|
22
|
+
fastmcp/client/logging.py,sha256=WBByRoBIB-Bl3ZUJVFvHqRt4teYPAvqC8MnJ358Elg8,1939
|
|
23
|
+
fastmcp/client/messages.py,sha256=g85Qca7aiMQLt4E4PwzUoLK6EIS8UM9j2qNwOEHjy0M,4636
|
|
24
|
+
fastmcp/client/oauth_callback.py,sha256=3xqL5_HD1QS9eGfw31HzoVF94QQelq_0TTqS7qWDlQQ,7709
|
|
25
|
+
fastmcp/client/progress.py,sha256=WjLLDbUKMsx8DK-fqO7AGsXb83ak-6BMrLvzzznGmcI,1043
|
|
26
|
+
fastmcp/client/roots.py,sha256=Uap1RSr3uEeQRZTHkEttkhTI2fOA8IeDcRSggtZp9aY,2568
|
|
27
|
+
fastmcp/client/sampling.py,sha256=MEXgywI46X-E78gCLCKEiQ14iu4uQqohLav-MNCtD_U,1819
|
|
28
|
+
fastmcp/client/tasks.py,sha256=EnWOa69Jw1MYkuf_rzFrhZlfCUpSFjiD7DkAoOlALSs,21653
|
|
29
|
+
fastmcp/client/transports.py,sha256=9WfOVMzLdYQqFcZ1cE2oR0KAp1XeOZ5hQNOhARkPl5s,42342
|
|
30
|
+
fastmcp/client/auth/__init__.py,sha256=4DNsfp4iaQeBcpds0JDdMn6Mmfud44stWLsret0sVKY,91
|
|
31
|
+
fastmcp/client/auth/bearer.py,sha256=MFEFqcH6u_V86msYiOsEFKN5ks1V9BnBNiPsPLHUTqo,399
|
|
32
|
+
fastmcp/client/auth/oauth.py,sha256=8B1HTPoPhEFQUZBfuhR6jqq4CHu6BDATVowC3ayZmg8,12513
|
|
33
|
+
fastmcp/contrib/README.md,sha256=rKknYSI1T192UvSszqwwDlQ2eYQpxywrNTLoj177SYU,878
|
|
34
|
+
fastmcp/contrib/bulk_tool_caller/README.md,sha256=5aUUY1TSFKtz1pvTLSDqkUCkGkuqMfMZNsLeaNqEgAc,1960
|
|
35
|
+
fastmcp/contrib/bulk_tool_caller/__init__.py,sha256=xvGSSaUXTQrc31erBoi1Gh7BikgOliETDiYVTP3rLxY,75
|
|
36
|
+
fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py,sha256=2NcrGS59qvHo1lfbRaT8NSWfCxN66knciLxFvnGwCLY,4165
|
|
37
|
+
fastmcp/contrib/bulk_tool_caller/example.py,sha256=6og_8pCJN_CabworC5R82zPAwwwM-W7HNJLQQSnS3lU,319
|
|
38
|
+
fastmcp/contrib/component_manager/README.md,sha256=sTan1D51jzkPNnCQTxwd5JXGzWVy4DtkUjrUfNH3-F0,4457
|
|
39
|
+
fastmcp/contrib/component_manager/__init__.py,sha256=9xu58ftB0Aqd5RymZgnkJMH9rTHBcrO6iMQX9qdEy3s,164
|
|
40
|
+
fastmcp/contrib/component_manager/component_manager.py,sha256=lS2KDsx_W6GDncWx6NhVNhg1X0TeGwQHWqP5PzlDPRM,6424
|
|
41
|
+
fastmcp/contrib/component_manager/component_service.py,sha256=hFW32Ti6RmYlEqL4FEIYCC1FyqMUkL7tOiJ8gay8cLg,8236
|
|
42
|
+
fastmcp/contrib/component_manager/example.py,sha256=N16OIHmQuR-LNEv7bkrv2rGdMs862Nc3AKKEPfw-6rU,1587
|
|
43
|
+
fastmcp/contrib/mcp_mixin/README.md,sha256=f6ine6z9kuEx1qKhY9jzrH6sAwj1oWpXcLXGvK0GMVk,5404
|
|
44
|
+
fastmcp/contrib/mcp_mixin/__init__.py,sha256=zZFHlAGexUJCDLAg4p7CGZDmb-mgPdN1xVv0tR4mg7I,153
|
|
45
|
+
fastmcp/contrib/mcp_mixin/example.py,sha256=GnunkXmtG5hLLTUsM8aW5ZURU52Z8vI4tNLl-fK7Dg0,1228
|
|
46
|
+
fastmcp/contrib/mcp_mixin/mcp_mixin.py,sha256=Ij009tiJBj1Lciz4abTICA1Il-kz_myr4aevQ4yGTNo,10582
|
|
47
|
+
fastmcp/experimental/sampling/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
|
+
fastmcp/experimental/sampling/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
|
+
fastmcp/experimental/sampling/handlers/base.py,sha256=mCPFj9ETc-Ro38R_pzx9rHVM2_EADCecScMkNWd6Tbs,714
|
|
50
|
+
fastmcp/experimental/sampling/handlers/openai.py,sha256=r7FUUL6fGHkYxsgFS44MyMxnaCrEYOYt9V98O_bjbyQ,5752
|
|
51
|
+
fastmcp/experimental/server/openapi/__init__.py,sha256=QNrM6ZNwJLk78jh7hq1tdZ-WnZLQ0KHd-7hjQgYeMqw,817
|
|
52
|
+
fastmcp/experimental/utilities/openapi/__init__.py,sha256=-SIYFQ4CE9MTxKQbksQ4J3lwm409EV3qKkHuTwAEyNk,907
|
|
53
|
+
fastmcp/prompts/__init__.py,sha256=BQ5ooDJcNhb5maYBcg2mF1VaHAY_A64cEU3UiCQ3Lw8,179
|
|
54
|
+
fastmcp/prompts/prompt.py,sha256=Rc8IOKXNI-5_3en_cw_Ej7LVV49oFTn_0EUxlRScjPw,14483
|
|
55
|
+
fastmcp/prompts/prompt_manager.py,sha256=5ZyT0blp5owuaN5pz_TQsyH6zUGFoUiVTGfiEnqBuj8,4262
|
|
56
|
+
fastmcp/resources/__init__.py,sha256=si8aT_9taxUNN0vkfbifst_SCId56DZmYi4YOb4mtlE,463
|
|
57
|
+
fastmcp/resources/resource.py,sha256=uDzQFPzELpmyEC2FirwuhfTxLkog0nKmMmWtGOb-67U,7890
|
|
58
|
+
fastmcp/resources/resource_manager.py,sha256=R-dtlhCYHcH1bnGuD0QW5aRUo_12_NeLkn9VLp4xmmU,13308
|
|
59
|
+
fastmcp/resources/template.py,sha256=SJiiWBiZVspUxfzovaDlQZpVwoUcENgUWT7UGXLUwxU,15495
|
|
60
|
+
fastmcp/resources/types.py,sha256=efFLGD1Xc5Xq3sxlPaZ_8gtJ2UOixueTBV4KQTi4cOU,4936
|
|
61
|
+
fastmcp/server/__init__.py,sha256=qxNmIJcqsrpxpUvCv0mhdEAaUn1UZd1xLd8XRoWUlfY,119
|
|
62
|
+
fastmcp/server/context.py,sha256=jQtDvn9IjxtYnzmDBnlpDAYMLYSn0efNy4QU6ww-HaY,28153
|
|
63
|
+
fastmcp/server/dependencies.py,sha256=7As8f1yRIQI0dSDpLVfSCPMXxaPuhUrDvNpxwjSG6W0,20643
|
|
64
|
+
fastmcp/server/elicitation.py,sha256=jmrLb_yzdmM9hVRxOYlC4aWnlCBCayuzVOs7--sByxU,17862
|
|
65
|
+
fastmcp/server/event_store.py,sha256=ZiBbrUQHw9--G8lzK1qLZmUAF2le2XchFen4pGbFKsE,6170
|
|
66
|
+
fastmcp/server/http.py,sha256=_HjMSYWH8mfKugDODU4iV0AhKDU2VRc40tS56L6i-_s,12737
|
|
67
|
+
fastmcp/server/low_level.py,sha256=o3jDf5SuZBQeurhLWRzaSVCnvrmaKMH_w-TbHk6BuZ4,7963
|
|
68
|
+
fastmcp/server/proxy.py,sha256=nG1ntmD9PpTbWpyY3Gn26vPpIcmjbEcoG3TlbYxeBB4,26855
|
|
69
|
+
fastmcp/server/server.py,sha256=BSh0AoOtFElhYxWZ1_ei2CdOHvn7hcHFQwpYShmdUWw,120764
|
|
70
|
+
fastmcp/server/auth/__init__.py,sha256=MTZvDKEUMqjs9-raRN0h8Zjx8pWFXs_iSRbB1UqBUqU,527
|
|
71
|
+
fastmcp/server/auth/auth.py,sha256=6FIjQLhQ-ps58o05nrOi5pyD1OmM0fANrV-M79Jb7do,19775
|
|
72
|
+
fastmcp/server/auth/jwt_issuer.py,sha256=lJYvrpC1ygI4jkoJlL_nTH6m7FKdTw2lbEycKo4eHLY,7197
|
|
73
|
+
fastmcp/server/auth/middleware.py,sha256=xwj3fUCLSlJK6n1Ehp-FN1qnjKqEz8b7LGAGMTqQ8Hk,3284
|
|
74
|
+
fastmcp/server/auth/oauth_proxy.py,sha256=Kk09KEK5YwZ2TnVbevqo0WuflBNz5kwWbOXq2St6itE,90694
|
|
75
|
+
fastmcp/server/auth/oidc_proxy.py,sha256=gU_RgBbVMj-9vn0TSRTmT1YaT19VFmJLpARcIXn208k,17969
|
|
76
|
+
fastmcp/server/auth/redirect_validation.py,sha256=Jlhela9xpTbw4aWnQ04A5Z-TW0HYOC3f9BMsq3NXx1Q,2000
|
|
77
|
+
fastmcp/server/auth/handlers/authorize.py,sha256=1zrmXqRUhjiWSHgUhfj0CcCkj3uSlGkTnxHzaic0xYs,11617
|
|
78
|
+
fastmcp/server/auth/providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
+
fastmcp/server/auth/providers/auth0.py,sha256=dZkc7hppii20YWota_6_Y3vdNw-DZSq0OyModbly-RA,7814
|
|
80
|
+
fastmcp/server/auth/providers/aws.py,sha256=MXoEEnXmeIlRjaHqTeNCmJ90iTx9jwUdEdpyLUmzfIc,10852
|
|
81
|
+
fastmcp/server/auth/providers/azure.py,sha256=Lq949keq4-AC7AR6Dbn5caEim5XOAK3WpnB-GmRPLtY,20891
|
|
82
|
+
fastmcp/server/auth/providers/debug.py,sha256=92erHZGQB1ATsl6PwrXui6h3WJ4wLxE9ACbI3JutmWY,3881
|
|
83
|
+
fastmcp/server/auth/providers/descope.py,sha256=y3PX3RmEL-JzHktKUbRW25QPZ7AVMGh579Pwgmr9P3k,9551
|
|
84
|
+
fastmcp/server/auth/providers/discord.py,sha256=AK7WRydWNnXAUWnFeYUqgcdqsGkwFfcKZcyZMuOQcUw,12616
|
|
85
|
+
fastmcp/server/auth/providers/github.py,sha256=xsv-Qj1VJRc64YcRuUG4a61xFH1nqqVX_biC7B1su9U,12414
|
|
86
|
+
fastmcp/server/auth/providers/google.py,sha256=BAw3XfB8fE2zr80OZUP-bZBnlHRmZQGuvmoVFgW5D1E,14723
|
|
87
|
+
fastmcp/server/auth/providers/in_memory.py,sha256=VjEQq8sEyPT0BQbjrOvriM0PY_HNd_YK1HbkrprVqyI,15496
|
|
88
|
+
fastmcp/server/auth/providers/introspection.py,sha256=v2hlcuxxwug5myCr4KcTZlawwazAWYVHuRb0d3er13w,10733
|
|
89
|
+
fastmcp/server/auth/providers/jwt.py,sha256=c-2Wji-CvuYt3U3unxjJR-5-EABRDks_755EpxKBDH8,20798
|
|
90
|
+
fastmcp/server/auth/providers/oci.py,sha256=QxpsStKEyl_W4dcJOky4m6wdpGnCSnt7WQ8DWjGPmSU,9894
|
|
91
|
+
fastmcp/server/auth/providers/scalekit.py,sha256=30J2HImUAkyknMgH7lUGytcDOy4d01ClxTrBCO4E3GQ,9064
|
|
92
|
+
fastmcp/server/auth/providers/supabase.py,sha256=9aK9fZ2OtccOF-ittMJnwj6sEzUNUTIrRPWAPLMwCac,7321
|
|
93
|
+
fastmcp/server/auth/providers/workos.py,sha256=_KWsgKPV4OJ6a37FaVgq2LIzM3Nx26G5QQhgS8x2MO4,17244
|
|
94
|
+
fastmcp/server/middleware/__init__.py,sha256=LXT2IcZI4gbAtR4TnA7v_1lOWBR6eaHiE3Cp32Pv0bc,155
|
|
95
|
+
fastmcp/server/middleware/caching.py,sha256=xYUXkFeuoLaIJ_TB2570qEBS1TtneJClJOpJGNsNbu8,18414
|
|
96
|
+
fastmcp/server/middleware/error_handling.py,sha256=eSMKrmIxDcnhzLGyOL49hup5k5e0iwvH_n2XVxJ69W8,7726
|
|
97
|
+
fastmcp/server/middleware/logging.py,sha256=Reta-f4z8suYkJn4rPyJWYrNBeU25w8Y40U0uaV9ygo,9427
|
|
98
|
+
fastmcp/server/middleware/middleware.py,sha256=-L4QuyyjIF1QIcydWzamrmpIE2w7d2f35-QyoXMZnZM,6643
|
|
99
|
+
fastmcp/server/middleware/rate_limiting.py,sha256=MwhMOhgsIhZjYwEQB8H8961hohV5564JlTwwYy_9ctU,7915
|
|
100
|
+
fastmcp/server/middleware/timing.py,sha256=lL_xc-ErLD5lplfvd5-HIyWEbZhgNBYkcQ74KFXAMkA,5591
|
|
101
|
+
fastmcp/server/middleware/tool_injection.py,sha256=zElqBN-yjZvcTADp57e0dn86kpxT9xsFqvYztiXuA08,3595
|
|
102
|
+
fastmcp/server/openapi/README.md,sha256=1Mc1Ur15OxMn-wAPEa1rZIiNNSMdv9sboQ3YpvNpUXM,9886
|
|
103
|
+
fastmcp/server/openapi/__init__.py,sha256=cZPebMY9xwjW8nUgTN5MvawnZEFx9E0Oe_TFqSrevp0,728
|
|
104
|
+
fastmcp/server/openapi/components.py,sha256=lHT3AJUKDt68-x7RpErP2ePLJp12HKKUn1VWq5TU6Ss,13346
|
|
105
|
+
fastmcp/server/openapi/routing.py,sha256=_WWci6GNqtfF-5yO-uHwXXc9nNFNV-YlbIWHa7-lCk4,4018
|
|
106
|
+
fastmcp/server/openapi/server.py,sha256=aQ_VwvHxdsC-O-7k_uKmPDkOlcgtOW-gk-RtlLtEtuw,16069
|
|
107
|
+
fastmcp/server/sampling/handler.py,sha256=yjLzvxlGllE-EY4bc6djsijEmwMT24PCpV6vJl-sPcI,580
|
|
108
|
+
fastmcp/server/tasks/__init__.py,sha256=VizXvmXgA3SvrApQ6PSz4z1TPA9B6uROvmWeGSYOJ0I,530
|
|
109
|
+
fastmcp/server/tasks/capabilities.py,sha256=-8QMBjs6HZuQdUNmOrNEBvJs-opGptIyxOODU0TGGFE,574
|
|
110
|
+
fastmcp/server/tasks/config.py,sha256=msPkUuxnZKuqSj21Eh8m5Cwq0htwUzTCeoWsnbvKGkk,3006
|
|
111
|
+
fastmcp/server/tasks/converters.py,sha256=gDEYtf0MD2ypyR1gdyweHM5LdS3-wTsQaiCrsSDIOyY,6640
|
|
112
|
+
fastmcp/server/tasks/handlers.py,sha256=8wiDiP6tHj8E3iMEIpjZmoiY_k1wgQg-F59KwGk56X8,12489
|
|
113
|
+
fastmcp/server/tasks/keys.py,sha256=w9diycj0N6ViVqe6stxUS9vg2H94bl_614Bu5kNRM-k,3011
|
|
114
|
+
fastmcp/server/tasks/protocol.py,sha256=g97D4k1U8ua_UBTyoqFXcPp5rf6KvuiY5d6mx5KMIPY,12222
|
|
115
|
+
fastmcp/server/tasks/subscriptions.py,sha256=iehPO2zx80aRIqKHCFj9kuR5NVMqYSkIepMXBifQFWw,6692
|
|
116
|
+
fastmcp/tools/__init__.py,sha256=XGcaMkBgwr-AHzbNjyjdb3ATgp5TQ0wzSq0nsrBD__E,201
|
|
117
|
+
fastmcp/tools/tool.py,sha256=Ouu-Z7ieGMv3xJ1eU4Et_Flfypglhgsr8iXHmVAFn60,23272
|
|
118
|
+
fastmcp/tools/tool_manager.py,sha256=pCQGvKimXYEigcUqRHBd6_mbfJwD2KN3i0SmFj9Fj_c,5913
|
|
119
|
+
fastmcp/tools/tool_transform.py,sha256=m1XDYuu_BDPxpH3yRNdT3jCca9KmVSO-Jd00BK4F5rw,38099
|
|
120
|
+
fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
|
|
121
|
+
fastmcp/utilities/auth.py,sha256=ZVHkNb4YBpLE1EmmFyhvFB2qfWDZdEYNH9TRI9jylOE,1140
|
|
122
|
+
fastmcp/utilities/cli.py,sha256=46gyOddE8kWhUV2lHFM7kA2v0YNyzcajvIX3Db8gJXk,12174
|
|
123
|
+
fastmcp/utilities/components.py,sha256=fF4M9cdqbZTlDAZ0hltcTTg_8IU2jNSzOyH4oqH49ig,6087
|
|
124
|
+
fastmcp/utilities/exceptions.py,sha256=7Z9j5IzM5rT27BC1Mcn8tkS-bjqCYqMKwb2MMTaxJYU,1350
|
|
125
|
+
fastmcp/utilities/http.py,sha256=1ns1ymBS-WSxbZjGP6JYjSO52Wa_ls4j4WbnXiupoa4,245
|
|
126
|
+
fastmcp/utilities/inspect.py,sha256=3wYUuQH1xCCCdzZwALHNqaRABH6iqpA43dIXEhqVb5Q,18030
|
|
127
|
+
fastmcp/utilities/json_schema.py,sha256=-XjtAVzCaaJ_S-HoWo7Aabvlu8ubBqyoOinm9E85F4o,8888
|
|
128
|
+
fastmcp/utilities/json_schema_type.py,sha256=5cf1ZeHzqirrGx62kznqmgAWk0uCc29REVKcDRBeJX0,22348
|
|
129
|
+
fastmcp/utilities/logging.py,sha256=61wVk5yQ62km3K8kZtkKtT_3EN26VL85GYW0aMtnwKA,7175
|
|
130
|
+
fastmcp/utilities/mcp_config.py,sha256=lVllZtAXZ3Zy78D40aXN-S5fs-ms0lgryL1tY2WzwCY,1783
|
|
131
|
+
fastmcp/utilities/tests.py,sha256=VIsYPpk07tXvE02yK_neBUeZgu5YtbUlK6JJNzU-6lQ,9229
|
|
132
|
+
fastmcp/utilities/types.py,sha256=7c56m736JjbKY-YP7RLWPZcsW5Z7mikpByKaDQ5IJwg,17586
|
|
133
|
+
fastmcp/utilities/ui.py,sha256=gcnha7Vj4xEBxdrS83EZlKpN_43AQzcgiZFEvkTqzqg,14252
|
|
134
|
+
fastmcp/utilities/mcp_server_config/__init__.py,sha256=hHBxEwRsrgN0Q-1bvj28X6UVGDpfG6dt3yfSBGsOY80,791
|
|
135
|
+
fastmcp/utilities/mcp_server_config/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
136
|
+
fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py,sha256=1B3J7sRR0GcOW6FcSNNTTTOtEePNhUKc7Y0xEDk-wao,15497
|
|
137
|
+
fastmcp/utilities/mcp_server_config/v1/schema.json,sha256=ymDNFOWzcpnhIMeJmVPTw9b-NtHoHoru8Mc0WlSVxUY,8602
|
|
138
|
+
fastmcp/utilities/mcp_server_config/v1/environments/__init__.py,sha256=Tkv0dmJ6tKKotOBo-tho09QVdvEjy37iBsvBbEwH0EA,256
|
|
139
|
+
fastmcp/utilities/mcp_server_config/v1/environments/base.py,sha256=fbC1C25jI1whwXLlIQtmji5B4UEHLgKvw5K8NICb33Y,826
|
|
140
|
+
fastmcp/utilities/mcp_server_config/v1/environments/uv.py,sha256=DPVAXM5JDTN89wOSQsFnww4khRfNphXY2yzVeiKicNg,9755
|
|
141
|
+
fastmcp/utilities/mcp_server_config/v1/sources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
|
+
fastmcp/utilities/mcp_server_config/v1/sources/base.py,sha256=Y5MCxJyoDsaxcBN1zDL0CZtF5oAXxT_yqQOI-ze9b34,967
|
|
143
|
+
fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py,sha256=eFX47XNXz2oKHW8MZvx60dqyHkBxdg2FMOrHcyAS28g,8106
|
|
144
|
+
fastmcp/utilities/openapi/README.md,sha256=pcxMeSIHUmuhXHRYV7GOuMUZtw9QBv-rowQIDqmkab8,7657
|
|
145
|
+
fastmcp/utilities/openapi/__init__.py,sha256=6FTQyP-kWvFg5Ykq53j7byBhPuysOyMYSrFTdUAKeO0,1592
|
|
146
|
+
fastmcp/utilities/openapi/director.py,sha256=bsK5W8-vdydbB85xMLy5WsQJewnObXaDrtAIS5HdKjY,7956
|
|
147
|
+
fastmcp/utilities/openapi/formatters.py,sha256=AWyETOfnBmTUcD1T2ajfkbsVyyMnN4tZ-U34hFScWqI,15546
|
|
148
|
+
fastmcp/utilities/openapi/json_schema_converter.py,sha256=PxaYpgHBsdDTT0XSP6s4RZBMeDpAO_-dRXlBF2iYD9s,13089
|
|
149
|
+
fastmcp/utilities/openapi/models.py,sha256=-kfndwZSe92tVtKAgOuFn5rk1tN7oydCZKtLOEMEalA,2805
|
|
150
|
+
fastmcp/utilities/openapi/parser.py,sha256=qsa68Ro1c8ov77kdEP20IwZqD74E4IGKjtfeIkn3HdE,34338
|
|
151
|
+
fastmcp/utilities/openapi/schemas.py,sha256=84nPtnOlfjNoFGDoVoWLs0dh_7Ps92p3AuHgpVA5a-s,23349
|
|
152
|
+
fastmcp-2.14.0.dist-info/METADATA,sha256=Jte7HhFdX33G_bDG7Ose0xDSzGr7TTS7OrjdRn5ddMY,20536
|
|
153
|
+
fastmcp-2.14.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
154
|
+
fastmcp-2.14.0.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
|
|
155
|
+
fastmcp-2.14.0.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
156
|
+
fastmcp-2.14.0.dist-info/RECORD,,
|
fastmcp/cli/claude.py
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
"""Claude app integration utilities."""
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
import os
|
|
5
|
-
import sys
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
from typing import Any
|
|
8
|
-
|
|
9
|
-
from fastmcp.utilities.logging import get_logger
|
|
10
|
-
from fastmcp.utilities.mcp_server_config.v1.environments.uv import UVEnvironment
|
|
11
|
-
|
|
12
|
-
logger = get_logger(__name__)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def get_claude_config_path() -> Path | None:
|
|
16
|
-
"""Get the Claude config directory based on platform."""
|
|
17
|
-
if sys.platform == "win32":
|
|
18
|
-
path = Path(Path.home(), "AppData", "Roaming", "Claude")
|
|
19
|
-
elif sys.platform == "darwin":
|
|
20
|
-
path = Path(Path.home(), "Library", "Application Support", "Claude")
|
|
21
|
-
elif sys.platform.startswith("linux"):
|
|
22
|
-
path = Path(
|
|
23
|
-
os.environ.get("XDG_CONFIG_HOME", Path.home() / ".config"), "Claude"
|
|
24
|
-
)
|
|
25
|
-
else:
|
|
26
|
-
return None
|
|
27
|
-
|
|
28
|
-
if path.exists():
|
|
29
|
-
return path
|
|
30
|
-
return None
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def update_claude_config(
|
|
34
|
-
file_spec: str,
|
|
35
|
-
server_name: str,
|
|
36
|
-
*,
|
|
37
|
-
with_editable: list[Path] | None = None,
|
|
38
|
-
with_packages: list[str] | None = None,
|
|
39
|
-
env_vars: dict[str, str] | None = None,
|
|
40
|
-
) -> bool:
|
|
41
|
-
"""Add or update a FastMCP server in Claude's configuration.
|
|
42
|
-
|
|
43
|
-
Args:
|
|
44
|
-
file_spec: Path to the server file, optionally with :object suffix
|
|
45
|
-
server_name: Name for the server in Claude's config
|
|
46
|
-
with_editable: Optional list of directories to install in editable mode
|
|
47
|
-
with_packages: Optional list of additional packages to install
|
|
48
|
-
env_vars: Optional dictionary of environment variables. These are merged with
|
|
49
|
-
any existing variables, with new values taking precedence.
|
|
50
|
-
|
|
51
|
-
Raises:
|
|
52
|
-
RuntimeError: If Claude Desktop's config directory is not found, indicating
|
|
53
|
-
Claude Desktop may not be installed or properly set up.
|
|
54
|
-
"""
|
|
55
|
-
config_dir = get_claude_config_path()
|
|
56
|
-
if not config_dir:
|
|
57
|
-
raise RuntimeError(
|
|
58
|
-
"Claude Desktop config directory not found. Please ensure Claude Desktop"
|
|
59
|
-
" is installed and has been run at least once to initialize its config."
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
config_file = config_dir / "claude_desktop_config.json"
|
|
63
|
-
if not config_file.exists():
|
|
64
|
-
try:
|
|
65
|
-
config_file.write_text("{}")
|
|
66
|
-
except Exception as e:
|
|
67
|
-
logger.error(
|
|
68
|
-
"Failed to create Claude config file",
|
|
69
|
-
extra={
|
|
70
|
-
"error": str(e),
|
|
71
|
-
"config_file": str(config_file),
|
|
72
|
-
},
|
|
73
|
-
)
|
|
74
|
-
return False
|
|
75
|
-
|
|
76
|
-
try:
|
|
77
|
-
config = json.loads(config_file.read_text())
|
|
78
|
-
if "mcpServers" not in config:
|
|
79
|
-
config["mcpServers"] = {}
|
|
80
|
-
|
|
81
|
-
# Always preserve existing env vars and merge with new ones
|
|
82
|
-
if (
|
|
83
|
-
server_name in config["mcpServers"]
|
|
84
|
-
and "env" in config["mcpServers"][server_name]
|
|
85
|
-
):
|
|
86
|
-
existing_env = config["mcpServers"][server_name]["env"]
|
|
87
|
-
if env_vars:
|
|
88
|
-
# New vars take precedence over existing ones
|
|
89
|
-
env_vars = {**existing_env, **env_vars}
|
|
90
|
-
else:
|
|
91
|
-
env_vars = existing_env
|
|
92
|
-
|
|
93
|
-
env_config = UVEnvironment(
|
|
94
|
-
dependencies=(with_packages or []) + ["fastmcp"],
|
|
95
|
-
editable=[str(p) for p in with_editable] if with_editable else None,
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
# Convert file path to absolute before adding to command
|
|
99
|
-
# Split off any :object suffix first
|
|
100
|
-
if ":" in file_spec:
|
|
101
|
-
file_path, server_object = file_spec.rsplit(":", 1)
|
|
102
|
-
file_spec = f"{Path(file_path).resolve()}:{server_object}"
|
|
103
|
-
else:
|
|
104
|
-
file_spec = str(Path(file_spec).resolve())
|
|
105
|
-
|
|
106
|
-
# Build the full command
|
|
107
|
-
full_command = env_config.build_command(["fastmcp", "run", file_spec])
|
|
108
|
-
|
|
109
|
-
# Extract command and args for the config
|
|
110
|
-
server_config: dict[str, Any] = {
|
|
111
|
-
"command": full_command[0],
|
|
112
|
-
"args": full_command[1:],
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
# Add environment variables if specified
|
|
116
|
-
if env_vars:
|
|
117
|
-
server_config["env"] = env_vars
|
|
118
|
-
|
|
119
|
-
config["mcpServers"][server_name] = server_config
|
|
120
|
-
|
|
121
|
-
config_file.write_text(json.dumps(config, indent=2))
|
|
122
|
-
logger.info(
|
|
123
|
-
f"Added server '{server_name}' to Claude config",
|
|
124
|
-
extra={"config_file": str(config_file)},
|
|
125
|
-
)
|
|
126
|
-
return True
|
|
127
|
-
except Exception as e:
|
|
128
|
-
logger.error(
|
|
129
|
-
"Failed to update Claude config",
|
|
130
|
-
extra={
|
|
131
|
-
"error": str(e),
|
|
132
|
-
"config_file": str(config_file),
|
|
133
|
-
},
|
|
134
|
-
)
|
|
135
|
-
return False
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"""Backwards compatibility shim for BearerAuthProvider.
|
|
2
|
-
|
|
3
|
-
The BearerAuthProvider class has been moved to fastmcp.server.auth.providers.jwt.JWTVerifier
|
|
4
|
-
for better organization. This module provides a backwards-compatible import.
|
|
5
|
-
"""
|
|
6
|
-
|
|
7
|
-
import warnings
|
|
8
|
-
|
|
9
|
-
import fastmcp
|
|
10
|
-
from fastmcp.server.auth.providers.jwt import JWKData, JWKSData, RSAKeyPair
|
|
11
|
-
from fastmcp.server.auth.providers.jwt import JWTVerifier as BearerAuthProvider
|
|
12
|
-
|
|
13
|
-
# Re-export for backwards compatibility
|
|
14
|
-
__all__ = ["BearerAuthProvider", "RSAKeyPair", "JWKData", "JWKSData"]
|
|
15
|
-
|
|
16
|
-
# Deprecated in 2.11
|
|
17
|
-
if fastmcp.settings.deprecation_warnings:
|
|
18
|
-
warnings.warn(
|
|
19
|
-
"The `fastmcp.server.auth.providers.bearer` module is deprecated "
|
|
20
|
-
"and will be removed in a future version. "
|
|
21
|
-
"Please use `fastmcp.server.auth.providers.jwt.JWTVerifier` "
|
|
22
|
-
"instead of this module's BearerAuthProvider.",
|
|
23
|
-
DeprecationWarning,
|
|
24
|
-
stacklevel=2,
|
|
25
|
-
)
|