fastmcp 0.3.0__py3-none-any.whl → 0.3.2__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/cli/claude.py +23 -17
- fastmcp/cli/cli.py +57 -13
- fastmcp/server.py +5 -2
- fastmcp/utilities/logging.py +6 -5
- {fastmcp-0.3.0.dist-info → fastmcp-0.3.2.dist-info}/METADATA +83 -17
- {fastmcp-0.3.0.dist-info → fastmcp-0.3.2.dist-info}/RECORD +9 -9
- {fastmcp-0.3.0.dist-info → fastmcp-0.3.2.dist-info}/WHEEL +0 -0
- {fastmcp-0.3.0.dist-info → fastmcp-0.3.2.dist-info}/entry_points.txt +0 -0
- {fastmcp-0.3.0.dist-info → fastmcp-0.3.2.dist-info}/licenses/LICENSE +0 -0
fastmcp/cli/claude.py
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import json
|
|
4
4
|
import sys
|
|
5
5
|
from pathlib import Path
|
|
6
|
-
from typing import Optional
|
|
6
|
+
from typing import Optional, Dict
|
|
7
7
|
|
|
8
8
|
from ..utilities.logging import get_logger
|
|
9
9
|
|
|
@@ -30,16 +30,17 @@ def update_claude_config(
|
|
|
30
30
|
*,
|
|
31
31
|
with_editable: Optional[Path] = None,
|
|
32
32
|
with_packages: Optional[list[str]] = None,
|
|
33
|
-
|
|
33
|
+
env_vars: Optional[Dict[str, str]] = None,
|
|
34
34
|
) -> bool:
|
|
35
|
-
"""Add
|
|
35
|
+
"""Add or update a FastMCP server in Claude's configuration.
|
|
36
36
|
|
|
37
37
|
Args:
|
|
38
38
|
file_spec: Path to the server file, optionally with :object suffix
|
|
39
39
|
server_name: Name for the server in Claude's config
|
|
40
40
|
with_editable: Optional directory to install in editable mode
|
|
41
41
|
with_packages: Optional list of additional packages to install
|
|
42
|
-
|
|
42
|
+
env_vars: Optional dictionary of environment variables. These are merged with
|
|
43
|
+
any existing variables, with new values taking precedence.
|
|
43
44
|
"""
|
|
44
45
|
config_dir = get_claude_config_path()
|
|
45
46
|
if not config_dir:
|
|
@@ -54,18 +55,17 @@ def update_claude_config(
|
|
|
54
55
|
if "mcpServers" not in config:
|
|
55
56
|
config["mcpServers"] = {}
|
|
56
57
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
)
|
|
58
|
+
# Always preserve existing env vars and merge with new ones
|
|
59
|
+
if (
|
|
60
|
+
server_name in config["mcpServers"]
|
|
61
|
+
and "env" in config["mcpServers"][server_name]
|
|
62
|
+
):
|
|
63
|
+
existing_env = config["mcpServers"][server_name]["env"]
|
|
64
|
+
if env_vars:
|
|
65
|
+
# New vars take precedence over existing ones
|
|
66
|
+
env_vars = {**existing_env, **env_vars}
|
|
67
|
+
else:
|
|
68
|
+
env_vars = existing_env
|
|
69
69
|
|
|
70
70
|
# Build uv run command
|
|
71
71
|
args = ["run", "--with", "fastmcp"]
|
|
@@ -89,11 +89,17 @@ def update_claude_config(
|
|
|
89
89
|
# Add fastmcp run command
|
|
90
90
|
args.extend(["fastmcp", "run", file_spec])
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
server_config = {
|
|
93
93
|
"command": "uv",
|
|
94
94
|
"args": args,
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
# Add environment variables if specified
|
|
98
|
+
if env_vars:
|
|
99
|
+
server_config["env"] = env_vars
|
|
100
|
+
|
|
101
|
+
config["mcpServers"][server_name] = server_config
|
|
102
|
+
|
|
97
103
|
config_file.write_text(json.dumps(config, indent=2))
|
|
98
104
|
logger.info(
|
|
99
105
|
f"Added server '{server_name}' to Claude config",
|
fastmcp/cli/cli.py
CHANGED
|
@@ -5,15 +5,16 @@ import importlib.util
|
|
|
5
5
|
import subprocess
|
|
6
6
|
import sys
|
|
7
7
|
from pathlib import Path
|
|
8
|
-
from typing import Optional, Tuple
|
|
8
|
+
from typing import Optional, Tuple, Dict
|
|
9
9
|
|
|
10
10
|
import typer
|
|
11
11
|
from typing_extensions import Annotated
|
|
12
|
+
import dotenv
|
|
12
13
|
|
|
13
14
|
from ..utilities.logging import get_logger
|
|
14
15
|
from . import claude
|
|
15
16
|
|
|
16
|
-
logger = get_logger(
|
|
17
|
+
logger = get_logger("cli")
|
|
17
18
|
|
|
18
19
|
app = typer.Typer(
|
|
19
20
|
name="fastmcp",
|
|
@@ -23,6 +24,17 @@ app = typer.Typer(
|
|
|
23
24
|
)
|
|
24
25
|
|
|
25
26
|
|
|
27
|
+
def _parse_env_var(env_var: str) -> Tuple[str, str]:
|
|
28
|
+
"""Parse environment variable string in format KEY=VALUE."""
|
|
29
|
+
if "=" not in env_var:
|
|
30
|
+
logger.error(
|
|
31
|
+
f"Invalid environment variable format: {env_var}. Must be KEY=VALUE"
|
|
32
|
+
)
|
|
33
|
+
sys.exit(1)
|
|
34
|
+
key, value = env_var.split("=", 1)
|
|
35
|
+
return key.strip(), value.strip()
|
|
36
|
+
|
|
37
|
+
|
|
26
38
|
def _build_uv_command(
|
|
27
39
|
file_spec: str,
|
|
28
40
|
with_editable: Optional[Path] = None,
|
|
@@ -263,7 +275,7 @@ def run(
|
|
|
263
275
|
|
|
264
276
|
except Exception as e:
|
|
265
277
|
logger.error(
|
|
266
|
-
"Failed to run server",
|
|
278
|
+
f"Failed to run server: {e}",
|
|
267
279
|
extra={
|
|
268
280
|
"file": str(file),
|
|
269
281
|
"error": str(e),
|
|
@@ -304,16 +316,32 @@ def install(
|
|
|
304
316
|
help="Additional packages to install",
|
|
305
317
|
),
|
|
306
318
|
] = [],
|
|
307
|
-
|
|
308
|
-
|
|
319
|
+
env_vars: Annotated[
|
|
320
|
+
list[str],
|
|
309
321
|
typer.Option(
|
|
310
|
-
"--
|
|
322
|
+
"--env-var",
|
|
323
|
+
"-e",
|
|
324
|
+
help="Environment variables in KEY=VALUE format",
|
|
325
|
+
),
|
|
326
|
+
] = [],
|
|
327
|
+
env_file: Annotated[
|
|
328
|
+
Optional[Path],
|
|
329
|
+
typer.Option(
|
|
330
|
+
"--env-file",
|
|
311
331
|
"-f",
|
|
312
|
-
help="
|
|
332
|
+
help="Load environment variables from a .env file",
|
|
333
|
+
exists=True,
|
|
334
|
+
file_okay=True,
|
|
335
|
+
dir_okay=False,
|
|
336
|
+
resolve_path=True,
|
|
313
337
|
),
|
|
314
|
-
] =
|
|
338
|
+
] = None,
|
|
315
339
|
) -> None:
|
|
316
|
-
"""Install a FastMCP server in the Claude desktop app.
|
|
340
|
+
"""Install a FastMCP server in the Claude desktop app.
|
|
341
|
+
|
|
342
|
+
Environment variables are preserved once added and only updated if new values
|
|
343
|
+
are explicitly provided.
|
|
344
|
+
"""
|
|
317
345
|
file, server_object = _parse_file_path(file_spec)
|
|
318
346
|
|
|
319
347
|
logger.debug(
|
|
@@ -324,7 +352,6 @@ def install(
|
|
|
324
352
|
"server_object": server_object,
|
|
325
353
|
"with_editable": str(with_editable) if with_editable else None,
|
|
326
354
|
"with_packages": with_packages,
|
|
327
|
-
"force": force,
|
|
328
355
|
},
|
|
329
356
|
)
|
|
330
357
|
|
|
@@ -345,14 +372,31 @@ def install(
|
|
|
345
372
|
)
|
|
346
373
|
name = file.stem
|
|
347
374
|
|
|
375
|
+
# Process environment variables if provided
|
|
376
|
+
env_dict: Optional[Dict[str, str]] = None
|
|
377
|
+
if env_file or env_vars:
|
|
378
|
+
env_dict = {}
|
|
379
|
+
# Load from .env file if specified
|
|
380
|
+
if env_file:
|
|
381
|
+
try:
|
|
382
|
+
env_dict.update(dotenv.dotenv_values(env_file))
|
|
383
|
+
except Exception as e:
|
|
384
|
+
logger.error(f"Failed to load .env file: {e}")
|
|
385
|
+
sys.exit(1)
|
|
386
|
+
|
|
387
|
+
# Add command line environment variables
|
|
388
|
+
for env_var in env_vars:
|
|
389
|
+
key, value = _parse_env_var(env_var)
|
|
390
|
+
env_dict[key] = value
|
|
391
|
+
|
|
348
392
|
if claude.update_claude_config(
|
|
349
393
|
file_spec,
|
|
350
394
|
name,
|
|
351
395
|
with_editable=with_editable,
|
|
352
396
|
with_packages=with_packages,
|
|
353
|
-
|
|
397
|
+
env_vars=env_dict,
|
|
354
398
|
):
|
|
355
|
-
|
|
399
|
+
logger.info(f"Successfully installed {name} in Claude app")
|
|
356
400
|
else:
|
|
357
|
-
|
|
401
|
+
logger.error(f"Failed to install {name} in Claude app")
|
|
358
402
|
sys.exit(1)
|
fastmcp/server.py
CHANGED
|
@@ -53,7 +53,11 @@ class Settings(BaseSettings):
|
|
|
53
53
|
For example, FASTMCP_DEBUG=true will set debug=True.
|
|
54
54
|
"""
|
|
55
55
|
|
|
56
|
-
model_config: SettingsConfigDict = SettingsConfigDict(
|
|
56
|
+
model_config: SettingsConfigDict = SettingsConfigDict(
|
|
57
|
+
env_prefix="FASTMCP_",
|
|
58
|
+
env_file=".env",
|
|
59
|
+
extra="ignore",
|
|
60
|
+
)
|
|
57
61
|
|
|
58
62
|
# Server settings
|
|
59
63
|
debug: bool = False
|
|
@@ -400,7 +404,6 @@ class FastMCP:
|
|
|
400
404
|
async def run_stdio_async(self) -> None:
|
|
401
405
|
"""Run the server using stdio transport."""
|
|
402
406
|
async with stdio_server() as (read_stream, write_stream):
|
|
403
|
-
logger.info(f'Starting "{self.name}"...')
|
|
404
407
|
await self._mcp_server.run(
|
|
405
408
|
read_stream,
|
|
406
409
|
write_stream,
|
fastmcp/utilities/logging.py
CHANGED
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
import logging
|
|
4
4
|
from typing import Literal
|
|
5
5
|
|
|
6
|
+
from rich.logging import RichHandler
|
|
7
|
+
|
|
6
8
|
|
|
7
9
|
def get_logger(name: str) -> logging.Logger:
|
|
8
10
|
"""Get a logger nested under FastMCP namespace.
|
|
9
11
|
|
|
10
12
|
Args:
|
|
11
|
-
name:
|
|
13
|
+
name: the name of the logger, which will be prefixed with 'FastMCP.'
|
|
12
14
|
|
|
13
15
|
Returns:
|
|
14
|
-
|
|
16
|
+
a configured logger instance
|
|
15
17
|
"""
|
|
16
18
|
return logging.getLogger(f"FastMCP.{name}")
|
|
17
19
|
|
|
@@ -22,9 +24,8 @@ def configure_logging(
|
|
|
22
24
|
"""Configure logging for FastMCP.
|
|
23
25
|
|
|
24
26
|
Args:
|
|
25
|
-
level:
|
|
27
|
+
level: the log level to use
|
|
26
28
|
"""
|
|
27
29
|
logging.basicConfig(
|
|
28
|
-
level=level,
|
|
29
|
-
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
|
30
|
+
level=level, format="%(message)s", handlers=[RichHandler(rich_tracebacks=True)]
|
|
30
31
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: fastmcp
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: A more ergonomic interface for MCP servers
|
|
5
5
|
Author: Jeremiah Lowin
|
|
6
6
|
License: Apache-2.0
|
|
@@ -9,6 +9,7 @@ Requires-Dist: httpx>=0.26.0
|
|
|
9
9
|
Requires-Dist: mcp<2.0.0,>=1.0.0
|
|
10
10
|
Requires-Dist: pydantic-settings>=2.6.1
|
|
11
11
|
Requires-Dist: pydantic<3.0.0,>=2.5.3
|
|
12
|
+
Requires-Dist: python-dotenv>=1.0.1
|
|
12
13
|
Requires-Dist: typer>=0.9.0
|
|
13
14
|
Provides-Extra: dev
|
|
14
15
|
Requires-Dist: copychat>=0.5.2; extra == 'dev'
|
|
@@ -22,7 +23,7 @@ Requires-Dist: ruff; extra == 'dev'
|
|
|
22
23
|
Description-Content-Type: text/markdown
|
|
23
24
|
|
|
24
25
|
<!-- omit in toc -->
|
|
25
|
-
# FastMCP
|
|
26
|
+
# FastMCP 🚀
|
|
26
27
|
|
|
27
28
|
<div align="center">
|
|
28
29
|
|
|
@@ -30,17 +31,46 @@ Description-Content-Type: text/markdown
|
|
|
30
31
|
[](https://github.com/jlowin/fastmcp/actions/workflows/run-tests.yml)
|
|
31
32
|
[](https://github.com/jlowin/fastmcp/blob/main/LICENSE)
|
|
32
33
|
|
|
34
|
+
The fast, Pythonic way to build MCP servers
|
|
35
|
+
|
|
33
36
|
</div>
|
|
34
37
|
|
|
35
|
-
|
|
38
|
+
[Model Context Protocol (MCP)](https://modelcontextprotocol.io) servers are a new, standardized way to provide context and tools to your LLMs, and FastMCP makes building MCP servers simple and intuitive. Create tools, expose resources, and define prompts with clean, Pythonic code:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
# demo.py
|
|
42
|
+
|
|
43
|
+
from fastmcp import FastMCP
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
mcp = FastMCP("Demo 🚀")
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
@mcp.tool()
|
|
50
|
+
def add(a: int, b: int) -> int:
|
|
51
|
+
"""Add two numbers"""
|
|
52
|
+
return a + b
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
That's it! Give Claude access to the server by running:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
fastmcp install demo.py
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
FastMCP handles all the complex protocol details and server management, so you can focus on building great tools. It's designed to be high-level and Pythonic - in most cases, decorating a function is all you need.
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
### Key features:
|
|
65
|
+
* **Fast**: High-level interface means less code and faster development
|
|
66
|
+
* **Simple**: Build MCP servers with minimal boilerplate
|
|
67
|
+
* **Pythonic**: Feels natural to Python developers
|
|
68
|
+
* **Complete***: FastMCP aims to provide a full implementation of the core MCP specification
|
|
36
69
|
|
|
37
|
-
|
|
70
|
+
(\*emphasis on *aims*)
|
|
71
|
+
|
|
72
|
+
🚨 🚧 🏗️ *FastMCP is under active development, as is the MCP specification itself. Core features are working but some advanced capabilities are still in progress.*
|
|
38
73
|
|
|
39
|
-
Key features:
|
|
40
|
-
* **Intuitive**: Designed to feel familiar to Python developers, with powerful type hints and editor support
|
|
41
|
-
* **Simple**: Build compliant MCP servers with minimal boilerplate
|
|
42
|
-
* **Fast**: High-performance async implementation
|
|
43
|
-
* **Full-featured**: Complete implementation of the MCP specification
|
|
44
74
|
|
|
45
75
|
<!-- omit in toc -->
|
|
46
76
|
## Table of Contents
|
|
@@ -57,7 +87,9 @@ Key features:
|
|
|
57
87
|
- [Context](#context)
|
|
58
88
|
- [Deployment](#deployment)
|
|
59
89
|
- [Development](#development)
|
|
90
|
+
- [Environment Variables](#environment-variables)
|
|
60
91
|
- [Claude Desktop](#claude-desktop)
|
|
92
|
+
- [Environment Variables](#environment-variables-1)
|
|
61
93
|
- [Examples](#examples)
|
|
62
94
|
- [Echo Server](#echo-server)
|
|
63
95
|
- [SQLite Explorer](#sqlite-explorer)
|
|
@@ -113,19 +145,21 @@ fastmcp install server.py
|
|
|
113
145
|
fastmcp dev server.py
|
|
114
146
|
```
|
|
115
147
|
|
|
116
|
-

|
|
117
149
|
|
|
118
150
|
## What is MCP?
|
|
119
151
|
|
|
120
152
|
The [Model Context Protocol (MCP)](https://modelcontextprotocol.io) lets you build servers that expose data and functionality to LLM applications in a secure, standardized way. Think of it like a web API, but specifically designed for LLM interactions. MCP servers can:
|
|
121
153
|
|
|
122
|
-
- Expose data through **Resources** (like GET endpoints)
|
|
123
|
-
- Provide functionality through **Tools** (like POST endpoints)
|
|
154
|
+
- Expose data through **Resources** (think of these sort of like GET endpoints; they are used to load information into the LLM's context)
|
|
155
|
+
- Provide functionality through **Tools** (sort of like POST endpoints; they are used to execute code or otherwise produce a side effect)
|
|
124
156
|
- Define interaction patterns through **Prompts** (reusable templates for LLM interactions)
|
|
157
|
+
- And more!
|
|
158
|
+
|
|
159
|
+
There is a low-level [Python SDK](https://github.com/modelcontextprotocol/python-sdk) available for implementing the protocol directly, but FastMCP aims to make that easier by providing a high-level, Pythonic interface.
|
|
125
160
|
|
|
126
161
|
## Core Concepts
|
|
127
162
|
|
|
128
|
-
*Note: All code examples below assume you've created a FastMCP server instance called `mcp`.*
|
|
129
163
|
|
|
130
164
|
### Server
|
|
131
165
|
|
|
@@ -140,6 +174,7 @@ mcp = FastMCP("My App")
|
|
|
140
174
|
# Configure host/port for HTTP transport (optional)
|
|
141
175
|
mcp = FastMCP("My App", host="localhost", port=8000)
|
|
142
176
|
```
|
|
177
|
+
*Note: All of the following code examples assume you've created a FastMCP server instance called `mcp`, as shown above.*
|
|
143
178
|
|
|
144
179
|
### Resources
|
|
145
180
|
|
|
@@ -297,6 +332,10 @@ fastmcp dev server.py --with pandas --with numpy
|
|
|
297
332
|
fastmcp dev server.py --with-editable .
|
|
298
333
|
```
|
|
299
334
|
|
|
335
|
+
#### Environment Variables
|
|
336
|
+
|
|
337
|
+
The MCP Inspector runs servers in an isolated environment. Environment variables must be set through the Inspector UI and are not inherited from your system. The Inspector does not currently support setting environment variables via command line (see [Issue #94](https://github.com/modelcontextprotocol/inspector/issues/94)).
|
|
338
|
+
|
|
300
339
|
### Claude Desktop
|
|
301
340
|
|
|
302
341
|
Install your server in Claude Desktop:
|
|
@@ -309,9 +348,6 @@ fastmcp install server.py --name "My Server"
|
|
|
309
348
|
|
|
310
349
|
# With dependencies
|
|
311
350
|
fastmcp install server.py --with pandas --with numpy
|
|
312
|
-
|
|
313
|
-
# Replace an existing server
|
|
314
|
-
fastmcp install server.py --force
|
|
315
351
|
```
|
|
316
352
|
|
|
317
353
|
The server name in Claude will be:
|
|
@@ -319,8 +355,38 @@ The server name in Claude will be:
|
|
|
319
355
|
2. The `name` from your FastMCP instance
|
|
320
356
|
3. The filename if the server can't be imported
|
|
321
357
|
|
|
358
|
+
#### Environment Variables
|
|
359
|
+
|
|
360
|
+
Claude Desktop runs servers in an isolated environment. Environment variables from your system are NOT automatically available to the server - you must explicitly provide them during installation:
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
# Single env var
|
|
364
|
+
fastmcp install server.py -e API_KEY=abc123
|
|
365
|
+
|
|
366
|
+
# Multiple env vars
|
|
367
|
+
fastmcp install server.py -e API_KEY=abc123 -e OTHER_VAR=value
|
|
368
|
+
|
|
369
|
+
# Load from .env file
|
|
370
|
+
fastmcp install server.py -f .env
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Environment variables persist across reinstalls and are only updated when new values are provided:
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
# First install
|
|
377
|
+
fastmcp install server.py -e FOO=bar -e BAZ=123
|
|
378
|
+
|
|
379
|
+
# Second install - FOO and BAZ are preserved
|
|
380
|
+
fastmcp install server.py -e NEW=value
|
|
381
|
+
|
|
382
|
+
# Third install - FOO gets new value, others preserved
|
|
383
|
+
fastmcp install server.py -e FOO=newvalue
|
|
384
|
+
```
|
|
385
|
+
|
|
322
386
|
## Examples
|
|
323
387
|
|
|
388
|
+
Here are a few examples of FastMCP servers. For more, see the `examples/` directory.
|
|
389
|
+
|
|
324
390
|
### Echo Server
|
|
325
391
|
A simple server demonstrating resources, tools, and prompts:
|
|
326
392
|
|
|
@@ -382,4 +448,4 @@ Schema:
|
|
|
382
448
|
{get_schema()}
|
|
383
449
|
|
|
384
450
|
What insights can you provide about the structure and relationships?"""
|
|
385
|
-
```
|
|
451
|
+
```
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
fastmcp/__init__.py,sha256=Y5dHGBwyQPgNP5gzOyNIItefvMZ3vJLdom1oV8A1u_k,248
|
|
2
2
|
fastmcp/exceptions.py,sha256=K0rCgXsUVlws39hz98Tb4BBf_BzIql_zXFZgqbkNTiE,348
|
|
3
|
-
fastmcp/server.py,sha256=
|
|
3
|
+
fastmcp/server.py,sha256=JttRzt1bnJGBU8mL4Bo764WHFXQ09QqKc_CUT3390WM,21997
|
|
4
4
|
fastmcp/cli/__init__.py,sha256=7hrwtCHX9nMd9qcz7R_JFSoqbL71fC35cBLXBS430mg,88
|
|
5
|
-
fastmcp/cli/claude.py,sha256=
|
|
6
|
-
fastmcp/cli/cli.py,sha256=
|
|
5
|
+
fastmcp/cli/claude.py,sha256=mepURIVhlwQQYgkjgmuJCS841QAs9Mu-xRxdLpfCO0o,3628
|
|
6
|
+
fastmcp/cli/cli.py,sha256=gzpgUseCR5tkdyZumjjxyAIYJLMeAdyJ5zgRHC9EL_M,11407
|
|
7
7
|
fastmcp/prompts/__init__.py,sha256=4BsMxoYolpoxg74xkkkzCFL8vvdkLVJ5cIPNs1ND1Jo,99
|
|
8
8
|
fastmcp/prompts/base.py,sha256=WaSsfyFSsUPUbcApkGy3Pm-Ne-Gk-5ZwU3efqRYn1mQ,4996
|
|
9
9
|
fastmcp/prompts/manager.py,sha256=EkexOB_N4QNtC-UlZmIcWcau91ceO2O1K4_kD75pA_A,1485
|
|
@@ -17,10 +17,10 @@ fastmcp/tools/__init__.py,sha256=ZboxhyMJDl87Svjov8YwNYwNZi55P9VhmpTjBZLesnk,96
|
|
|
17
17
|
fastmcp/tools/base.py,sha256=JPdTx8SAl5pKsHyIVxnsLG88f3fbjnopDTOAZ_PoVQE,2585
|
|
18
18
|
fastmcp/tools/tool_manager.py,sha256=PT6XHcQWzhdC6kfdsJaddRn7VLps4nAs5FMG8l1j8Zc,1617
|
|
19
19
|
fastmcp/utilities/__init__.py,sha256=-imJ8S-rXmbXMWeDamldP-dHDqAPg_wwmPVz-LNX14E,31
|
|
20
|
-
fastmcp/utilities/logging.py,sha256=
|
|
20
|
+
fastmcp/utilities/logging.py,sha256=VLJdNc0tIYoQZmpobehLUnWrQz7NXnuwSqrDlFt2RF0,738
|
|
21
21
|
fastmcp/utilities/types.py,sha256=jFlZMZsKrJg4NWc1vTBIILLoHpTVwSd-vxO7ycoRuig,1718
|
|
22
|
-
fastmcp-0.3.
|
|
23
|
-
fastmcp-0.3.
|
|
24
|
-
fastmcp-0.3.
|
|
25
|
-
fastmcp-0.3.
|
|
26
|
-
fastmcp-0.3.
|
|
22
|
+
fastmcp-0.3.2.dist-info/METADATA,sha256=R64QFKVKLfIVWjOFi-vmEL3At_Dx8rwHTBdjBOTLC30,13617
|
|
23
|
+
fastmcp-0.3.2.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
|
|
24
|
+
fastmcp-0.3.2.dist-info/entry_points.txt,sha256=ff8bMtKX1JvXyurMibAacMSKbJEPmac9ffAKU9mLnM8,44
|
|
25
|
+
fastmcp-0.3.2.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
26
|
+
fastmcp-0.3.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|