diff --git a/examples/memory.py b/examples/memory.py index 2dc3c09e8..eb3e4b00a 100644 --- a/examples/memory.py +++ b/examples/memory.py @@ -14,7 +14,6 @@ import math import os from dataclasses import dataclass from datetime import datetime, timezone -from pathlib import Path from typing import Annotated, Any, Self import asyncpg @@ -24,6 +23,7 @@ from pgvector.asyncpg import register_vector # Import register_vector from pydantic import BaseModel, Field from pydantic_ai import Agent +import fastmcp from fastmcp import FastMCP MAX_DEPTH = 5 @@ -45,9 +45,9 @@ mcp = FastMCP( ) DB_DSN = "postgresql://postgres:postgres@localhost:54320/memory_db" -# reset memory with rm ~/.fastmcp/{USER}/memory/* +# reset memory by deleting the profile directory PROFILE_DIR = ( - Path.home() / ".fastmcp" / os.environ.get("USER", "anon") / "memory" + fastmcp.settings.home / os.environ.get("USER", "anon") / "memory" ).resolve() PROFILE_DIR.mkdir(parents=True, exist_ok=True) diff --git a/pyproject.toml b/pyproject.toml index cf1c6edc0..1b930c9bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ dependencies = [ "httpx>=0.28.1", "mcp>=1.17.0,<2.0.0", "openapi-pydantic>=0.5.1", + "platformdirs>=4.0.0", "rich>=13.9.4", "cyclopts>=3.0.0", "authlib>=1.5.2", diff --git a/src/fastmcp/settings.py b/src/fastmcp/settings.py index ae4b5e617..ca84cb5a2 100644 --- a/src/fastmcp/settings.py +++ b/src/fastmcp/settings.py @@ -6,6 +6,7 @@ import warnings from pathlib import Path from typing import TYPE_CHECKING, Annotated, Any, Literal +from platformdirs import user_data_dir from pydantic import Field, ImportString, field_validator from pydantic.fields import FieldInfo from pydantic_settings import ( @@ -150,7 +151,7 @@ class Settings(BaseSettings): ) return self - home: Path = Path.home() / ".fastmcp" + home: Path = Path(user_data_dir("fastmcp", appauthor=False)) test_mode: bool = False diff --git a/uv.lock b/uv.lock index 0ce7322cd..13c78b2d5 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.11'", @@ -553,6 +553,7 @@ dependencies = [ { name = "mcp" }, { name = "openapi-core" }, { name = "openapi-pydantic" }, + { name = "platformdirs" }, { name = "py-key-value-aio", extra = ["disk", "memory"] }, { name = "pydantic", extra = ["email"] }, { name = "pyperclip" }, @@ -603,6 +604,7 @@ requires-dist = [ { name = "openai", marker = "extra == 'openai'", specifier = ">=1.102.0" }, { name = "openapi-core", specifier = ">=0.19.5" }, { name = "openapi-pydantic", specifier = ">=0.5.1" }, + { name = "platformdirs", specifier = ">=4.0.0" }, { name = "py-key-value-aio", extras = ["disk", "memory"], specifier = ">=0.2.6,<0.3.0" }, { name = "pydantic", extras = ["email"], specifier = ">=2.11.7" }, { name = "pyperclip", specifier = ">=1.9.0" },