diff --git a/AGENTS.md b/AGENTS.md index cdb5bee7a..fa49d1429 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,7 +24,7 @@ uv run pytest # Run full test suite | ------------------ | --------------------------------------------------- | | `src/fastmcp/` | Library source code (Python ≥ 3.10) | | `├─server/` | Server implementation, `FastMCP`, auth, networking | -| `│ ├─auth/` | Authentication providers (Bearer, JWT, WorkOS) | +| `│ ├─auth/` | Authentication providers (Google, GitHub, Azure, AWS, WorkOS, Auth0, JWT, and more) | | `│ └─middleware/` | Error handling, logging, rate limiting | | `├─client/` | High-level client SDK + transports | | `│ └─auth/` | Client authentication (Bearer, OAuth) | @@ -262,4 +262,4 @@ uv sync # Installs all deps including dev tools 1. **Dependencies**: Always `uv sync` first 2. **Pre-commit fails**: Run `uv run pre-commit run --all-files` to see failures 3. **Type errors**: Use `uv run ty check` directly, check `pyproject.toml` config -4. **Test timeouts**: Default 3s - optimize or mark as integration tests +4. **Test timeouts**: Default 5s - optimize or mark as integration tests diff --git a/README.md b/README.md index 59f68e37d..977aaae15 100644 --- a/README.md +++ b/README.md @@ -211,7 +211,6 @@ Access MCP session capabilities within your tools, resources, or prompts by addi - **Logging:** Log messages to MCP clients with `ctx.info()`, `ctx.error()`, etc. - **LLM Sampling:** Use `ctx.sample()` to request completions from the client's LLM. -- **HTTP Request:** Use `ctx.http_request()` to make HTTP requests to other servers. - **Resource Access:** Use `ctx.read_resource()` to access resources on the server - **Progress Reporting:** Use `ctx.report_progress()` to report progress to the client. - and more... @@ -321,7 +320,7 @@ FastMCP provides comprehensive authentication support that sets it apart from ba Protecting a server takes just two lines: ```python -from fastmcp.server.auth import GoogleProvider +from fastmcp.server.auth.providers.google import GoogleProvider auth = GoogleProvider(client_id="...", client_secret="...", base_url="https://myserver.com") mcp = FastMCP("Protected Server", auth=auth) diff --git a/pyproject.toml b/pyproject.toml index c23e4e71f..f524a7db8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,6 @@ dependencies = [ "openapi-core>=0.19.5", "py-key-value-aio[disk,memory,keyring]>=0.2.6,<0.3.0", "websockets>=15.0.1", - "pytest-asyncio>=1.2.0", ] requires-python = ">=3.10" @@ -41,6 +40,7 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Typing :: Typed", ] @@ -61,6 +61,7 @@ dev = [ "pyinstrument>=5.0.2", "pyperclip>=1.9.0", "pytest>=8.3.3", + "pytest-asyncio>=1.2.0", "pytest-cov>=6.1.1", "pytest-env>=1.1.5", "pytest-flakefinder", diff --git a/tests/server/auth/providers/test_azure.py b/tests/server/auth/providers/test_azure.py index 5826ba33c..1cbab0dbc 100644 --- a/tests/server/auth/providers/test_azure.py +++ b/tests/server/auth/providers/test_azure.py @@ -208,7 +208,6 @@ def test_init_with_custom_audience_uses_jwt_verifier(self): # Scopes should be prefixed with identifier_uri assert verifier.required_scopes == ["api://my-api/.default"] - @pytest.mark.asyncio async def test_authorize_filters_resource_and_accepts_prefixed_scopes(self): """authorize() should drop resource parameter and accept prefixed scopes from clients.""" provider = AzureProvider( @@ -262,7 +261,6 @@ async def test_authorize_filters_resource_and_accepts_prefixed_scopes(self): # Azure provider filters resource parameter (not stored in transaction) assert transaction.resource is None - @pytest.mark.asyncio async def test_authorize_appends_additional_scopes(self): """authorize() should append additional_authorize_scopes to the authorization request.""" provider = AzureProvider(