Commit Graph

21 Commits

Author SHA1 Message Date
Henry Mao
fb7d0c8dac Pyright 2025-03-12 13:56:05 -07:00
Henry Mao
ba184a2667 Ruff 2025-03-12 13:51:35 -07:00
Henry Mao
fd826cc7a6 Fix Websocket Client and Add Test 2025-03-07 22:00:56 +08: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
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
2dc5fbfa3d fix: add test for #176 2025-01-28 11:19:13 +00: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
David Soria Parra
ed87ae9f06 rename mcp_python to mcp 2024-11-11 12:40:32 +00:00
Nick Merrill
60e9c7a0d7 Add in-memory transport (#25)
## Goal

Support running an MCP server in the same process as the client, while preserving MCP abstractions.

## Details

1. **(core change)** Adds a new `memory` transport module that enables in-process client-server communication.
This includes:
   - `create_client_server_memory_streams()` to create bidirectional memory streams
   - `create_connected_server_and_client_session()` to establish an in-process client-server connection

3. (minor) Enhances error handling and timeout support:
   - Adds configurable read timeouts to sessions via `read_timeout_seconds` parameter
   - Improves exception handling in the server with a new `raise_exceptions` flag to control whether errors are returned to clients or raised directly
   - Ensures proper cleanup of request context tokens in error cases

4. (minor) Makes server improvements:
   - Adds built-in ping handler support
2024-11-05 15:42:41 -08:00