Commit graph

114 commits

Author SHA1 Message Date
nate nowack
aba7d762de
switch from pre-commit to prek (#2309)
* switch from pre-commit to prek

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix prek tools list in contributing.mdx - include prettier, not pytest

* Use prek-action for caching

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
2025-11-02 17:08:36 -05:00
Brandon Shar
c18782f02b
Add meta support to ToolResult (#2283)
* Add meta to ToolResult

* add this at the client level and test the full integration

* add example

* slipped through linting somehow

---------

Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
2025-11-02 16:46:52 -05:00
Cole Murray
c8ddbff488
Security: Update authlib to 1.6.5 (CVE-2025-61920) (#2347)
Updates authlib from 1.6.1 to 1.6.5 to address CVE-2025-61920, which
fixes a denial of service vulnerability in JOSE implementation that
accepts unbounded JWS/JWT header and signature segments.
2025-11-02 11:46:55 -05:00
Jeremiah Lowin
dab125e069
Remove test warnings (#2331) 2025-11-01 14:53:51 -04:00
Jeremiah Lowin
87adacfc8b
Require uvicorn>=0.35 for websockets-sansio support (#2307)
Fixes #2299

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Jeremiah Lowin <jlowin@users.noreply.github.com>
2025-10-31 10:22:55 -04:00
Jeremiah Lowin
887e72b39b
Replace openapi-core with jsonschema-path (#2291) 2025-10-28 06:46:52 -07:00
Jeremiah Lowin
318da83f6b
Fix py-key-value-aio minimum version to 0.2.8 (#2288)
* Fix py-key-value-aio minimum version to 0.2.8

FernetEncryptionWrapper was introduced in 0.2.8, not 0.2.6.

Fixes #2284

* Update lockfile
2025-10-28 06:30:03 -07:00
William Easton
9d4c378e1b
Add "High Value" Ruff Rules (#2255)
* Safe Fixes from ruff

* Fix remaining issues

* lint/check

* Fix mysterious ty check errors

* small cleanup

* pr fixes
2025-10-26 10:20:31 -04:00
William Easton
c002bc389c
Small Clean-up (#2247)
* Project Clean-up

* Move pytest-asyncio to dev dependencies and update agents.md
2025-10-24 19:11:01 -04:00
William Easton
063ffe9f64
Derive jwt_signing_key from Client Secret, default to Encrypted Disk Store (#2223)
* Checkpoint progress

* Checkpoint progress

* add derive b64 method

* PR clean-up

* refactor da proxy

* Updates to tests

* Make jwt_signing_key required for oauth proxy

* use typing_extensions and fix tests

* PR Cleanup

* also adjust integration tests

* Update docs, use client secret to derive jwt signing key

* You win some you lose some, gg claude

* check for both in derive

* update documentation / clean up

* Update http.mdx

---------

Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
2025-10-24 19:08:58 -04:00
Jeremiah Lowin
686082a5b5
Add platform-aware OAuth token persistence (#2218)
* Add comprehensive keyring integration tests

Prevents OS keyring pollution during testing by adding a global mock in
conftest.py. Tests verify keyring behavior across platforms and fallback
scenarios without writing to the actual system keyring.

- Add global mock_keyring fixture to tests/conftest.py
- Add TestOAuthProxyKeyring class with 6 keyring-specific tests
- Remove try/except ImportError for keyring (now required dependency)
- Add keyring extra to py-key-value-aio dependency
- Clean up extraneous implementation comments in oauth_proxy.py

* Update OAuth keyring documentation

Update all OAuth-related documentation to reflect keyring-based key management:
- Add version badges to jwt_signing_key, token_encryption_key, and client_storage parameters
- Standardize "Default behavior (`None`):" formatting with backticks
- Ensure consistent messaging about development-only defaults across all docs
- Update oauth-proxy.mdx, oidc-proxy.mdx, http.mdx, storage-backends.mdx, and upgrade-guide.mdx
2025-10-22 20:42:24 -04:00
Jeremiah Lowin
8099201979
Use platformdirs for settings.home (#2213)
Changes settings.home from `Path.home() / ".fastmcp"` to use platformdirs.user_data_dir(), following platform conventions (~/Library/Application Support on macOS, ~/.local/share on Linux, %APPDATA% on Windows).
2025-10-22 16:06:46 -04:00
William Easton
c833fff63c
Bump to 0.2.6 2025-10-21 11:38:07 -05:00
Jeremiah Lowin
3321644ad3
Replace subprocess tests with in-process async servers (#2006)
* Use anyio as testing backend

* Remove asyncio markers

* Update streamable http tests

* Replace all subprocess tests

* Replace anyio task groups with asyncio context managers in tests

- Convert run_server_async from anyio task group pattern to asyncio.create_task with async context manager
- Remove task_group fixture from conftest
- Update all test fixtures to use async with run_server_async pattern
- Remove TaskGroup imports from all test files
- Tests now work with pytest-asyncio instead of pytest-anyio

* Update test_github_provider_integration.py
2025-10-19 10:47:54 -04:00
Jeremiah Lowin
4a9f02c87c
Upgrade to MCP 1.17+ with RFC 9728 compliance (#2122)
* Upgrade to MCP 1.17+ with RFC 9728 compliance

Updates FastMCP to require MCP 1.17+ and implements RFC 9728-compliant
OAuth protected resource metadata URL handling.

The key change is that .well-known/oauth-protected-resource endpoints
are now registered at path-aware locations. For example, if an MCP
server is mounted at /mcp, the metadata endpoint is now at
/.well-known/oauth-protected-resource/mcp instead of
/.well-known/oauth-protected-resource.

This ensures proper OAuth discovery for path-based resource servers
and aligns with the MCP SDK's implementation of RFC 9728 §3.1.

Changes include:
- Update minimum MCP version from 1.12.4 to 1.17.0
- Use build_resource_metadata_url() for RFC 9728 compliance
- Configure CI to test with latest package versions (--upgrade)
- Update tests for path-aware metadata URLs
- Add icons field to Tool model (introduced in MCP 1.17)

* Fix RemoteAuthProvider integration tests for RFC 9728

* Fix parameterized test for nested base URL paths
2025-10-17 09:29:23 -04:00
William Easton
5831c4bb60
PR Clean-up 2025-10-16 21:56:55 -05:00
William Easton
67a19afe89
Merge branch 'main' into responsecachingmiddleware 2025-10-14 16:59:53 -05:00
William Easton
cc6df567da
bump kv to 0.2.2 2025-10-14 13:54:47 -05:00
William Easton
af6b55a4ff
Update dependencies 2025-10-10 19:36:40 -04:00
William Easton
28370827dc
Merge branch 'main' into responsecachingmiddleware 2025-10-10 17:37:34 -04:00
William Easton
de0c39c1b3
Add raise on validation error and set uniform collection names 2025-10-08 23:40:58 -04:00
William Easton
598dfb9a9a
Merge branch 'main' into switch-kvstore 2025-10-05 09:15:26 -05:00
William Easton
4b85b0c3ff
Mark github tests as flaky 2025-10-03 21:25:35 -05:00
William Easton
a9ee0b577a
Merge branch 'main' into switch-kvstore 2025-09-29 17:12:09 -05:00
Jeremiah Lowin
e8673b4d8b
Fix Python 3.13 websockets deprecation warning (#1949) 2025-09-29 15:24:20 -04:00
William Easton
55ac070a59
Merge branch 'main' into switch-kvstore 2025-09-28 21:35:46 -05:00
William Easton
ccd12c4b1b
Refactor for key-value 0.2.0 2025-09-28 21:35:22 -05:00
Christian Clauss
d6aa980ff5
Fix typos discovered by codespell (#1922) 2025-09-26 12:02:28 -04:00
William Easton
294a191cf9
bump kv store adapter to fix pydantic bug 2025-09-24 20:45:08 -05:00
William Easton
2f8ec7628c
Small PR cleanup 2025-09-24 18:18:32 -05:00
William Easton
dee2bb51d9
Switch to DiskStore KV implementation 2025-09-24 18:07:57 -05:00
William Easton
84eea7c708
Automatically Create inline Snapshots (#1779)
Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
2025-09-19 13:35:58 -04:00
Daniel Campos Olivares
867438eda8
fix: Increase default 3s timeout on Pytest (#1866) 2025-09-19 12:52:18 -04:00
William Easton
a9113d0c9a
Refactor cache, add Elasticsearch cache backend as a contrib module with docs 2025-09-18 13:47:42 -05:00
William Easton
84b3e0ff60
Adding response caching with tests 2025-09-17 19:10:18 -05:00
William Easton
09369b5555
Add disk cache 2025-09-16 22:47:49 -05:00
William Easton
fe4f31c2c7
Enable more type checking rules (#1775) 2025-09-07 11:11:44 -04:00
Jeremiah Lowin
05b611b68d
Make openai depedency optional (#1701) 2025-09-02 15:13:37 -04:00
William Easton
94b1eb9d6e
feat: introduce inline snapshots (#1605)
Co-authored-by: William Easton <strawgate@users.noreply.github.com>
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2025-08-25 10:08:55 -04:00
Jeremiah Lowin
302eb9c3f5
Remove invalid-argument-type ignore and fix type errors (#1588)
Co-authored-by: Jeremiah Lowin <jlowin@users.noreply.github.com>
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2025-08-22 20:19:22 -04:00
William Easton
d32a2b953e
Fallback to a Completions API when Sampling is not available (#1145) 2025-08-21 07:49:29 -04:00
nate nowack
77b425c47d
switch from pyright to ty (#1545) 2025-08-19 17:22:52 -04:00
William Easton
8d14c0916c
Improve stdio and mcp_config clean-up (#1444) 2025-08-15 11:03:44 -04:00
Jeremiah Lowin
f8f05ca395
Clean up complexity from PR #1426 (#1435) 2025-08-10 21:55:17 -04:00
Jeremiah Lowin
18533951ad
Pin mcp SDK under 2.0 to avoid breaking changes (#1428) 2025-08-10 09:10:18 -04:00
Yann Jouanin
456b22ecf4
Enable Protected Resource Metadata to provide resource_name and resou… (#1371)
Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
2025-08-10 09:01:12 -04:00
Jeremiah Lowin
558c7d2a66
Fix OpenAPI transitive references and performance (#1372) (#1426) 2025-08-09 20:53:51 -04:00
Jeremiah Lowin
b46d4934a8
Add comprehensive OAuth 2.1 authentication system with WorkOS integration (#1327) 2025-08-01 17:06:55 -04:00
Jeremiah Lowin
c40149d970
Ensure validation errors are raised when masked (#1330) 2025-08-01 17:06:27 -04:00
William Easton
3be8f5ea93
Add UV Transport (#1270)
Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
2025-07-28 15:41:36 -04:00