60e0ffc959
Schema Crash Test / Real-world schema crash test (232K schemas) (push) Waiting to run
Run static analysis / static_analysis (push) Waiting to run
Tests / Tests: Python 3.10 on ubuntu-latest (push) Waiting to run
Tests / Tests: Python 3.13 on ubuntu-latest (push) Waiting to run
Tests / Tests: Python 3.10 on windows-latest (push) Waiting to run
Tests / Tests with lowest-direct dependencies (push) Waiting to run
Tests / Package install smoke (push) Waiting to run
Upgrade checks / Static analysis (push) Waiting to run
Upgrade checks / Tests: Python 3.10 on ubuntu-latest (push) Waiting to run
Upgrade checks / Tests: Python 3.13 on ubuntu-latest (push) Waiting to run
Upgrade checks / Tests: Python 3.10 on windows-latest (push) Waiting to run
Upgrade checks / Integration tests (push) Waiting to run
Upgrade checks / Notify on failure (push) Blocked by required conditions
Upgrade checks / Close issue on success (push) Blocked by required conditions
Update MCPServerConfig Schema / update-config-schema (push) Waiting to run
Update SDK Documentation / update-sdk-docs (push) Waiting to run
Tests / MCP conformance tests (push) Waiting to run
Tests / Integration tests (push) Waiting to run
88 lines
2.9 KiB
Plaintext
88 lines
2.9 KiB
Plaintext
---
|
|
title: token_cache
|
|
sidebarTitle: token_cache
|
|
---
|
|
|
|
# `fastmcp.utilities.token_cache`
|
|
|
|
|
|
In-memory cache for token verification results.
|
|
|
|
Provides a generic TTL-based cache for ``AccessToken`` objects, designed to
|
|
reduce repeated network calls during opaque-token verification. Only
|
|
*successful* verifications should be cached; errors and failures must be
|
|
retried on every request.
|
|
|
|
Example:
|
|
```python
|
|
from fastmcp.utilities.token_cache import TokenCache
|
|
|
|
cache = TokenCache(ttl_seconds=300, max_size=10000)
|
|
|
|
# On cache miss, call the upstream verifier and store the result.
|
|
hit, token = cache.get(raw_token)
|
|
if not hit:
|
|
token = await _call_upstream(raw_token)
|
|
if token is not None:
|
|
cache.set(raw_token, token)
|
|
```
|
|
|
|
|
|
## Classes
|
|
|
|
### `TokenCache` <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/fastmcp_slim/fastmcp/utilities/token_cache.py#L46" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
TTL-based in-memory cache for ``AccessToken`` objects.
|
|
|
|
Features:
|
|
- SHA-256 hashed cache keys (fixed size, regardless of token length).
|
|
- Per-entry TTL that respects both the configured ``ttl_seconds`` and the
|
|
token's own ``expires_at`` claim (whichever is sooner).
|
|
- Bounded size with FIFO eviction when the cache is full.
|
|
- Periodic cleanup of expired entries to prevent unbounded growth.
|
|
- Defensive deep copies on both store and retrieve to prevent
|
|
callers from mutating cached values.
|
|
|
|
Caching is disabled when ``ttl_seconds`` is ``None`` or ``0``, or
|
|
when ``max_size`` is ``0``. Negative values raise ``ValueError``.
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `enabled` <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/fastmcp_slim/fastmcp/utilities/token_cache.py#L89" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
enabled(self) -> bool
|
|
```
|
|
|
|
Return whether caching is active.
|
|
|
|
|
|
#### `get` <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/fastmcp_slim/fastmcp/utilities/token_cache.py#L95" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
get(self, token: str) -> tuple[bool, AccessToken | None]
|
|
```
|
|
|
|
Look up a cached verification result.
|
|
|
|
**Returns:**
|
|
- ``(True, AccessToken)`` on a cache hit, ``(False, None)`` on a miss
|
|
- or when caching is disabled. The returned ``AccessToken`` is a deep
|
|
- copy that is safe to mutate.
|
|
|
|
|
|
#### `set` <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/fastmcp_slim/fastmcp/utilities/token_cache.py#L118" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
set(self, token: str, result: AccessToken) -> None
|
|
```
|
|
|
|
Store a *successful* verification result.
|
|
|
|
Only successful verifications should be cached. Failures (inactive
|
|
tokens, missing scopes, HTTP errors, timeouts) must **not** be cached
|
|
so that transient problems do not produce sticky false negatives.
|
|
|