Jeremiah Lowin
016b9f90e0
Fix confused deputy attack via consent binding cookie ( #3201 )
...
* Add consent binding cookie to prevent confused deputy attacks (GHSA-rww4-4w9c-7733)
The OAuthProxy's consent page verified user intent but didn't bind the
consenting browser to the IdP callback. An attacker could intercept the
upstream authorization URL after consent and send it to a victim, whose
browser would complete the flow without having the consent cookie.
This adds a signed consent binding cookie set during consent approval
(both manual and auto-approve paths) and verified in the IdP callback
handler. A different browser won't have this cookie and gets a 403.
* Use startswith for URL assertion in consent binding test
* Store consent bindings as per-transaction map to support parallel flows
* Only accept __Host- consent binding cookie on HTTPS
* chore: Update SDK documentation
---------
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-17 10:24:07 -05:00
Bill Easton
2dcbb944a8
Minimize resolved review threads in PRs ( #3200 )
...
* Minimize resolved review threads in PRs
* cancel in progress runs when there are duplicates
* add /tidy comment support
2026-02-17 08:22:31 -05:00
Jeremiah Lowin
5dd8cde2f9
Drop diskcache dependency (CVE-2025-69872) ( #3185 )
...
* Drop diskcache dependency (CVE-2025-69872)
Switch default OAuth proxy storage from DiskStore (backed by diskcache,
which uses pickle serialization) to FileTreeStore (file-per-key JSON).
This removes diskcache from the dependency tree entirely, resolving
CVE-2025-69872 for pip-audit and similar scanners.
* chore: Update SDK documentation
* Add comments explaining FileTreeStore warning suppression
* chore: Update SDK documentation
* Isolate storage by encryption key, gracefully handle decryption failures
* chore: Update SDK documentation
* Bump py-key-value-aio lower bound to 0.4.2 for FileTreeStore security hardening
* chore: Update SDK documentation
* Document storage backend change and update DiskStore references
* Bump py-key-value-aio lower bound to 0.4.3
* Bump py-key-value-aio to 0.4.4, remove warning suppression
* chore: Update SDK documentation
---------
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-16 16:43:15 -05:00
Jeremiah Lowin
5dc2432950
Merge pull request #3198 from jlowin/fix/ty-errors
...
Fix ty 0.0.17 diagnostics
2026-02-16 16:24:42 -05:00
Jeremiah Lowin
564b4c0d5c
Fix ty 0.0.17 diagnostics and bump lockfile
2026-02-16 16:13:38 -05:00
Jeremiah Lowin
85a833a74b
Reorganize docs navigation around Server/Client/Apps pillars ( #3197 )
...
* Reorganize docs navigation and add Apps documentation
Collapse Providers, Transforms, and Deployment under Servers. Add Apps
section with overview and low-level API pages. Add card images to welcome
page and README. Add NEW tags to recent features.
* Fix missing imports in Apps low-level API code examples
2026-02-16 15:33:16 -05:00
Jeremiah Lowin
b4eb1adbeb
Merge pull request #3195 from jlowin/fix/stateless-http-disable-get-sse
...
Return 405 for GET SSE on stateless HTTP servers
2026-02-16 09:32:21 -05:00
Jeremiah Lowin
dab2084c74
Return 405 for GET requests on stateless HTTP servers
2026-02-16 09:08:32 -05:00
Jeremiah Lowin
453dcbe808
Merge pull request #3194 from jlowin/docs/caching-identity-note
...
Document cache key identity behavior
2026-02-16 08:55:29 -05:00
Jeremiah Lowin
62804e2f06
Add cache key identity note to middleware docs
2026-02-16 08:52:28 -05:00
Jeremiah Lowin
d3032c10a2
Merge pull request #3193 from jfBiswajit/fix/readme-logo
...
fix: correct dark mode logo file extension in README
2026-02-16 08:40:16 -05:00
Biswajit Biswas
964ba12bc5
fix: correct dark mode logo file extension in README
2026-02-16 15:56:10 +06:00
Jeremiah Lowin
b14b137fdd
Merge pull request #3188 from jlowin/feature/dev-subcommand-group
...
v3.0.0rc2
Move `fastmcp dev` to `fastmcp dev inspector`
2026-02-13 21:47:29 -06:00
marvin-context-protocol[bot]
edac1e5427
chore: Update SDK documentation
2026-02-14 03:43:26 +00:00
Jeremiah Lowin
618195c065
Move fastmcp dev to fastmcp dev inspector
2026-02-13 22:42:38 -05:00
Jeremiah Lowin
ccfe5047bf
Fix include_tags/exclude_tags ignored without tools in MCPConfig ( #3186 )
...
* Fix include_tags/exclude_tags ignored without tools in MCPConfig
* chore: Update SDK documentation
---------
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-13 20:38:56 -05:00
dependabot[bot]
bb60287005
chore(deps): bump cryptography in the uv group across 1 directory ( #3147 )
...
Bumps the uv group with 1 update in the / directory: [cryptography](https://github.com/pyca/cryptography ).
Updates `cryptography` from 46.0.4 to 46.0.5
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst )
- [Commits](https://github.com/pyca/cryptography/compare/46.0.4...46.0.5 )
---
updated-dependencies:
- dependency-name: cryptography
dependency-version: 46.0.5
dependency-type: indirect
dependency-group: uv
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 17:38:02 -05:00
Jeremiah Lowin
e5553177d7
docs: update all references from 3.0.0b2 to 3.0.0rc1 ( #3173 )
v3.0.0rc1
2026-02-12 16:39:16 -06:00
Jeremiah Lowin
5f941be5a3
Fix stale request context in StatefulProxyClient handlers ( #3172 )
...
* fix: restore request context in StatefulProxyClient handlers
StatefulProxyClient reuses sessions across requests, so its receive-loop
task inherits a stale request_ctx ContextVar from the first request.
Server-initiated messages (elicitation, sampling, etc.) that depend on
related_request_id routing get sent to a closed stream and hang forever.
Closes #3169
* chore: Update SDK documentation
---------
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-12 17:13:23 -05:00
Jeremiah Lowin
b62ed3408b
Support non-serializable values in Context.set_state ( #3171 )
...
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-12 15:06:42 -06:00
Jeremiah Lowin
88c89248d0
Merge pull request #3157 from jlowin/update-claude-workflows
...
Updates to github actions / workflows for claude
2026-02-12 14:49:16 -05:00
Jeremiah Lowin
3907a4f9b6
docs: fix stale get_* references, now list_* ( #3168 )
2026-02-12 13:45:49 -06:00
Jeremiah Lowin
175479f65f
fix: guard client pagination loops against misbehaving servers ( #3167 )
...
* fix: guard client pagination loops against misbehaving servers
Treat empty/falsy nextCursor as end-of-pagination and detect cursor
cycles across all client list methods and the server context proxy
helper.
* chore: Update SDK documentation
---------
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-12 13:19:02 -06:00
Bill Easton
359575b12f
Add helpers for converting FunctionTool and TransformedTool to SamplingTool ( #3062 )
...
Co-authored-by: Bill Easton <strawgate@users.noreply.github.com>
Co-authored-by: Jeremiah Lowin <jlowin@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com>
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-11 19:43:03 -06:00
Jeremiah Lowin
a307e9c3cc
Expose local_provider property, deprecate FastMCP.remove_tool() ( #3155 )
...
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-11 19:37:19 -06:00
William Easton
16a85ffcd8
pretty yaml
2026-02-11 16:07:50 -06:00
William Easton
b42f6f9a48
update conditionals
2026-02-11 16:07:22 -06:00
William Easton
c9fbd1f5de
Merge origin/main into update-claude-workflows
...
Resolve conflict: remove old martian-issue-triage.yml (replaced by martian-triage-issue.yml)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-11 15:56:47 -06:00
William Easton
b3b630ee7b
Updates to github actions / workflows for claude
2026-02-11 15:52:54 -06:00
Jeremiah Lowin
fe57c3d689
Make $ref dereferencing optional via FastMCP(dereference_refs=...) ( #3151 )
...
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-11 13:45:37 -05:00
Jeremiah Lowin
50b23299f8
Support async auth checks ( #3152 )
...
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-11 12:48:51 -05:00
Jeremiah Lowin
25e2f4da32
Remove deprecated FastMCP() constructor kwargs ( #3148 )
...
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-11 11:39:34 -05:00
Jeremiah Lowin
0f95ed72cd
Stop duplicating path parameter descriptions into tool prose ( #3149 )
...
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-11 11:34:11 -05:00
Guillaume FORTAINE
263e0bf6e0
fix: snapshot access token for background tasks ( #3095 ) ( #3138 )
...
Co-authored-by: cristiangreco94 <cristiangreco94@users.noreply.github.com>
2026-02-11 10:20:14 -05:00
dependabot[bot]
f75cd05e50
chore(deps): bump cryptography ( #3140 )
...
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-11 10:19:38 -05:00
Jeremiah Lowin
3e79572660
docs: remove nonexistent MSALApp from rc1 notes ( #3146 )
2026-02-11 10:19:02 -05:00
Jeremiah Lowin
f3d33f830c
docs: add v3.0.0rc1 section to v3-features tracking ( #3145 )
2026-02-11 10:16:54 -05:00
Bill Easton
8e1f662d93
Bump py-key-value-aio to >=0.4.0,<0.5.0 ( #3143 )
...
Co-authored-by: Bill Easton <strawgate@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-11 10:03:45 -05:00
Chris Guidry
efcc12bc76
Merge pull request #3136 from jlowin/task-elicitation-relay
...
Relay task elicitation through standard MCP protocol
2026-02-10 16:06:37 -05:00
marvin-context-protocol[bot]
a53030a806
chore: Update SDK documentation
2026-02-10 21:00:34 +00:00
Chris Guidry
6e22914360
Move relay logic to elicitation.py, fix related-task metadata key
...
Moves relay_elicitation() into elicitation.py so it can reuse
handle_task_input() for the Redis push instead of duplicating that logic.
notifications.py just detects the trigger and calls it.
Also fixes the related-task metadata key from modelcontextprotocol.io/ to
io.modelcontextprotocol/ to match the current spec:
https://modelcontextprotocol.io/specification/2025-11-25/basic/utilities/tasks
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 16:00:01 -05:00
Chris Guidry
a95fed3041
Merge branch 'main' into task-elicitation-relay
2026-02-10 15:41:25 -05:00
marvin-context-protocol[bot]
95b4271b3b
chore: Update SDK documentation
2026-02-10 20:36:17 +00:00
Chris Guidry
aa4db3d00e
Address review: set status key on cancel fallback, prevent relay task GC
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 15:35:50 -05:00
Chris Guidry
95816c5ae2
Merge pull request #2906 from gfortaine/fix/statusMessage-not-forwarded
...
feat: distributed notification queue + BLPOP elicitation for background tasks
2026-02-10 15:32:55 -05:00
Chris Guidry
361eb08f42
Relay task elicitation through standard MCP protocol
...
When a background task calls ctx.elicit(), the notification subscriber now
detects the input_required notification and sends a standard elicitation/create
request to the client via session.elicit(). The client's elicitation_handler
fires, and the relay pushes the response to Redis for the blocked worker.
This means clients can respond to background task elicitation using the same
elicitation_handler they'd use for any other elicitation — no need to interact
with Redis or call handle_task_input() directly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 14:58:19 -05:00
Chris Guidry
3809f0c77b
Merge branch 'main' into fix/statusMessage-not-forwarded
2026-02-10 14:22:58 -05:00
Jeremiah Lowin
1d0c0adeab
Add validate_output option for OpenAPI tools ( #3134 )
...
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-10 13:29:45 -05:00
Jeremiah Lowin
a715176499
Fix unhandled exceptions in OpenAPI POST tool calls ( #3133 )
...
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
2026-02-10 13:13:45 -05:00
Jeremiah Lowin
40e80d60e5
Fix session visibility marks leaking across sessions ( #3132 )
2026-02-10 11:42:43 -05:00