75 Commits

Author SHA1 Message Date
Heet Vekariya dda11d42b1 [Fix]: Pytest for test_desktop (#452)
Main branch checks / checks (push) Failing after 0s
2025-05-13 14:31:43 +01:00
Pol Avec ec62372be8 Fixes incorrect casting into int for numbers in string format (#384) 2025-03-27 14:48:48 +00:00
David Soria Parra c8ce49c92d Fix #177: Returning multiple tool results (#222)
* feat: allow lowlevel servers to return a list of resources

The resource/read message in MCP allows of multiple resources
to be returned. However, in the SDK we do not allow this. This
change is such that we allow returning multiple resource in
the lowlevel API if needed. However in FastMCP we stick to
one, since a FastMCP resource defines the mime_type in the decorator
and hence a resource cannot dynamically return different mime_typed resources.
It also is just the better default to only return one resource.
However in the lowlevel API we will allow this.

Strictly speaking this is not a BC break since the new return value
is additive, but if people subclassed server, it will break them.

* feat: lower the type requriements for call_tool to Iterable
2025-02-20 21:31:47 +00:00
David Soria Parra e503de1c05 fix: mark test as pytest.mark.anyio 2025-02-20 11:05:50 +00:00
Jerome b8a77fc2e8 Add client handling for sampling, list roots, ping (#218)
Adds sampling and list roots callbacks to the ClientSession, allowing the client to handle requests from the server.

Co-authored-by: TerminalMan <84923604+SecretiveShell@users.noreply.github.com>
Co-authored-by: David Soria Parra <davidsp@anthropic.com>
2025-02-20 10:50:16 +00:00
David Soria Parra faf3a9d7d6 Merge pull request #205 from modelcontextprotocol/issue-192-request-id-test
Add test to verify request ID preservation
2025-02-13 15:10:00 +00:00
David Soria Parra fbf4acc679 fix: method ordering 2025-02-13 14:54:53 +00:00
Jerome 9abfe775cc Added failing test 2025-02-13 14:46:57 +00:00
David Soria Parra 41af509bcb Add test to verify request ID preservation
This test ensures that the server properly preserves and returns the same request ID in responses,
which is a fundamental part of the JSON-RPC protocol. The test initializes the server, sends
requests with custom IDs, and verifies that these IDs are correctly returned.

Github-Issue:#192
2025-02-12 16:32:21 +00:00
David Soria Parra e5815bd162 docs: update README with lifespan examples and usage
Add comprehensive documentation for lifespan support:
- Add usage examples for both Server and FastMPC classes
- Document startup/shutdown patterns
- Show context access in tools and handlers
- Clean up spacing in test files
2025-02-11 12:16:51 +00:00
David Soria Parra e598750cba test: add tests for server lifespan support
Adds comprehensive tests for lifespan functionality:
- Tests for both low-level Server and FastMCP classes
- Coverage for startup, shutdown, and context access
- Verifies context passing to request handlers
2025-02-11 12:16:47 +00:00
David Soria Parra f10665db4c tests: cleanup 2025-02-05 11:02:51 +00:00
David Soria Parra c58adfe3f5 Merge pull request #167 from modelcontextprotocol/davidsp/88-v2
feat: add request cancellation and cleanup
2025-02-04 20:23:05 +00:00
David Soria Parra 27bfde95a4 fix: fix tests 2025-02-04 20:16:30 +00:00
David Soria Parra 08cfbe522a fix: improve error handling and request cancellation for issue #88 2025-02-04 18:20:17 +00:00
David Soria Parra 827e494df4 feat: add request cancellation and in-flight request tracking
This commit adds support for request cancellation and tracking of
in-flight requests in the MCP protocol implementation. The key
architectural changes are:

1. Request Lifecycle Management:
   - Added _in_flight dictionary to BaseSession to track active requests
   - Requests are tracked from receipt until completion/cancellation
   - Added proper cleanup via on_complete callback

2. Cancellation Support:
   - Added CancelledNotification handling in _receive_loop
   - Implemented cancel() method in RequestResponder
   - Uses anyio.CancelScope for robust cancellation
   - Sends error response on cancellation

3. Request Context:
   - Added request_ctx ContextVar for request context
   - Ensures proper cleanup after request handling
   - Maintains request state throughout lifecycle

4. Error Handling:
   - Improved error propagation for cancelled requests
   - Added proper cleanup of cancelled requests
   - Maintains consistency of in-flight tracking

This change enables clients to cancel long-running requests and
servers to properly clean up resources when requests are cancelled.

Github-Issue:#88
2025-02-03 20:50:05 +00:00
David Soria Parra 888bdd3c34 tests for issue 88 2025-02-03 14:03:41 +00:00
David Soria Parra 0d3e02f6a2 fix: standardize resource response format
Github-Issue:#141
2025-02-03 11:33:32 +00:00
Jerome 444edf6760 Merge pull request #180 from modelcontextprotocol/jeremy/relax-pydantic
Relax pydantic, pydantic-settings, and uvicorn requirements
2025-01-31 07:07:59 +13:00
David Soria Parra 5e19c7cf73 Merge pull request #176 from sheffler/fixFirstProgressReport
progress_token is 0 on first tool-call and the return is taken mistakenly
2025-01-30 16:00:01 +00:00
jeremy defd52b2d6 Fix comment about pydantic versioning 2025-01-30 10:21:03 -05:00
jeremy 0d48a4494f relax pydantic, pydantic-settings, and uvicorn 2025-01-29 22:49:43 -05:00
David Soria Parra 2dc5fbfa3d fix: add test for #176 2025-01-28 11:19:13 +00:00
David Soria Parra 070e8412c0 refactor: standardize resource response format
Introduce ReadResourceContents type to properly handle MIME types in resource responses. Breaking change in FastMCP read_resource() return type.

Github-Issue:#152
2025-01-27 20:36:10 +00:00
David Soria Parra 8ff4b5e9d3 fix: respect resource mime type in responses
The server was ignoring mime types set on resources, defaulting to text/plain
for strings and application/octet-stream for bytes. Now properly preserves
the specified mime type in both FastMCP and low-level server implementations.

Note that this is breaks backwards compatibility as it changes the return
values of read_resource() on FastMCP. It is BC compatible on lowlevel since
it only extends the callback.

Github-Issue: #152
Reported-by: eiseleMichael
2025-01-27 15:51:44 +00:00
David Soria Parra f10c2e3f1f fix: add test to reproduce #152 2025-01-27 15:50:52 +00:00
David Soria Parra 978cfe3f92 more fixes 2025-01-27 15:49:59 +00:00
David Soria Parra 43a30c1d00 fix tests 2025-01-27 14:36:48 +00:00
Michał Pstrąg f5f19b2361 add support for async resources 2025-01-18 19:37:39 +01:00
Nick Merrill d01d49ea6e add timeout test 2025-01-14 12:10:41 -05:00
Nick Merrill e798d20cbb ruff 2025-01-14 11:56:44 -05:00
Nick Merrill aa7869a62f add type hints 2025-01-14 11:54:09 -05:00
Nick Merrill 3fa26a5a97 remove unused imports 2025-01-14 11:49:04 -05:00
Nick Merrill 07e721f63f formatting 2025-01-14 11:47:41 -05:00
Nick Merrill 7b35ab844a run server in separate process 2025-01-14 11:44:03 -05:00
Nick Merrill 8d90a3afa3 attempt at server in process 2025-01-14 11:15:05 -05:00
Nick Merrill 7ab1fc71aa attempt to get server to shut down 2025-01-14 11:01:43 -05:00
Nick Merrill 8f81a85abe all tests passing with custom port, but not passing all together 2025-01-14 10:45:55 -05:00
Nick Merrill e79a56435a passing SSE client test 2025-01-14 10:34:32 -05:00
Nick Merrill 66ccd1c515 test_sse_connection is passing 2025-01-14 10:18:27 -05:00
Nick Merrill a0e2f7fab7 WIP 2025-01-14 09:38:06 -05:00
Nick Merrill 3f9f7c8311 WIP 2025-01-14 09:27:42 -05:00
Nick Merrill b0a6aafaf6 WIP 2025-01-14 09:24:44 -05:00
Nick Merrill f164291483 trying to test SSE 2025-01-14 09:22:05 -05:00
Salman Mohammed bc6746e89b Add instructions field to ServerSession and FastMCP 2025-01-13 13:00:11 -05:00
Salman Mohammed 135191403a Add instructions field to InitializeResult 2025-01-13 11:58:43 -05:00
David Soria Parra 4770bcd0b1 fix: #129 resource template handling in FastMCP server 2025-01-06 20:02:03 +00:00
David Soria Parra b66c6759c3 feat: add example and test for parameter descriptions in FastMCP tools 2025-01-06 12:30:44 +00:00
David Soria Parra e21e8c157d style: Fix import sorting and update ruff version 2025-01-03 15:57:14 +00:00
David Soria Parra 329f595f5f fix: Fix line length in test_server.py 2025-01-03 15:53:19 +00:00