Commit graph

341 commits

Author SHA1 Message Date
Henry Mao
2bcca39aae
Update lock 2025-03-12 13:51:35 -07:00
Jerome
d51726a9e8
Merge branch 'main' into patch-1 2025-03-12 09:31:56 +00:00
Marcelo Trylesinski
3e0ab1e7ee
Drop AbstractAsyncContextManager for proper type hints (#257) 2025-03-11 13:17:15 +00:00
Marcelo Trylesinski
5cbea24ecb
Use proper generic for Context (#245) 2025-03-11 13:15:07 +00:00
David Soria Parra
06e692ba5c
fix: fix the name of the env variable 2025-03-11 10:26:38 +00:00
Henry Mao
dec28830b9
Remove try except 2025-03-08 10:53:56 +08:00
Henry Mao
ea8a2dbd6d
Reraise exception and make websocket optional 2025-03-08 10:52:10 +08:00
Henry Mao
9d65e5ac03
Remove optional check 2025-03-07 22:02:16 +08:00
Henry Mao
fd826cc7a6
Fix Websocket Client and Add Test 2025-03-07 22:00:56 +08:00
Henry Mao
fc021eea76
Apply suggestions from code review
Co-authored-by: Marcelo Trylesinski <marcelotryle@gmail.com>
2025-03-06 20:12:51 +08:00
Henry Mao
f67c3ee6c0
Merge branch 'modelcontextprotocol:main' into patch-1 2025-03-06 13:24:01 +08:00
David Soria Parra
775f879813
bump version 2025-02-20 21:40:35 +00:00
David Soria Parra
b1942b31c4
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:26 +00:00
Jerome
2628e01f4b
Merge pull request #217 from modelcontextprotocol/jerome/fix/request-context-typing
Updated typing on request context for the server to use server session
2025-02-20 11:07:54 +00:00
David Soria Parra
a50cf92d3a
fix: ruff format 2025-02-20 11:04:46 +00:00
David Soria Parra
10a85e452d
fix: mark test as pytest.mark.anyio 2025-02-20 11:04:29 +00:00
Jerome
ff22f48365
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:49:43 +00:00
Randall Nortman
106619967b
Force stdin/stdout encoding to UTF-8
The character encoding of the stdin/stdout streams in Python is platform-
dependent. On Windows it will be something weird, like CP437 or CP1252,
depending on the locale. This change ensures that no matter the platform,
UTF-8 is used.
2025-02-18 11:23:24 +00:00
Justin Spahr-Summers
5480f67cf9
Merge pull request #207 from hmwildermuth/main
Update URL validation to allow file and other nonstandard schemas
2025-02-13 23:05:59 +00:00
Henry Wildermuth
b53e090299 Update URL validation to allow file and other nonstandard schemas 2025-02-13 14:58:58 -08: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
92ba4f41d0
Merge pull request #206 from modelcontextprotocol/jerome/fix/188
Jerome/fix/188
2025-02-13 15:09:42 +00:00
David Soria Parra
fbf4acc679
fix: method ordering 2025-02-13 14:54:53 +00:00
Jerome
da53a97ed9
Made message handling concurrent 2025-02-13 14:53:08 +00:00
Jerome
9abfe775cc
Added failing test 2025-02-13 14:46:57 +00:00
Jerome
0b5644723b
Added ignore revs (for gitlense) 2025-02-13 14:46:57 +00:00
Jerome
e4503a72c8
Added scratch/ to gitignore 2025-02-13 14:46:57 +00:00
David Soria Parra
7c47d1f25f
Merge pull request #203 from modelcontextprotocol/davidsp/clean-lifespan
feat: add lifespan context manager support
2025-02-13 14:26:28 +00:00
David Soria Parra
4d3e05f6f6
refactor: improve lifespan context typing and documentation
- Add proper generic parameter for lifespan context type
- Update README with TypedDict example for strong typing
- Fix context variable initialization in server
- Improve property return type safety
- Remove redundant documentation
- Ensure compatibility with existing tests
2025-02-13 10:12:59 +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
fddba00723
refactor: improve server context management with AsyncExitStack
Replace nested context managers with AsyncExitStack to ensure proper cleanup
order during server shutdown and make the code more maintainable.
2025-02-11 12:26:32 +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
d3ea9009b0
feat: add lifespan support to FastMCP server
Adds support for the lifespan API to FastMCP server, enabling:
- Simple setup with FastMCP constructor
- Type-safe context passing to tools and handlers
- Configuration via Settings class
2025-02-11 12:16:44 +00:00
David Soria Parra
2c7bd8343e
feat: add lifespan support to low-level MCP server
Adds a context manager based lifespan API in mcp.server.lowlevel.server to manage server lifecycles in a
type-safe way. This enables servers to:
- Initialize resources on startup and clean them up on shutdown
- Pass context data from startup to request handlers
- Support async startup/shutdown operations
2025-02-11 12:16:40 +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
733db0c9cf
fix: enforce context manager usage for RequestResponder 2025-02-04 20:13:26 +00:00
David Soria Parra
08042c3307
Merge pull request #181 from zzstoatzz/update-fastmcp-server-typing
satisfy `pyright` untyped decorators in `mcp.server.fastmcp.server`
2025-02-04 18:25:32 +00:00
David Soria Parra
08cfbe522a
fix: improve error handling and request cancellation for issue #88 2025-02-04 18:20:17 +00:00
zzstoatzz
ca060014bb centralize type 2025-02-04 11:11:38 -06:00
zzstoatzz
00a44692e7 init 2025-02-04 11:11:38 -06:00
David Soria Parra
51e65c8310
Merge pull request #186 from modelcontextprotocol/fix/141-resource-templates
fix: standardize resource response format
2025-02-04 14:25:28 +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
960b92355e
add uv.lock for simple-chatbot 2025-02-03 13:25:30 +00:00
David Soria Parra
a9ae38237d
check uv lockfile 2025-02-03 12:33:30 +00:00
David Soria Parra
ce06b6291d
chore: update uv.lock 2025-02-03 11:36:13 +00:00
David Soria Parra
0d3e02f6a2
fix: standardize resource response format
Github-Issue:#141
2025-02-03 11:33:32 +00:00