Commit graph python-sdk/src/mcp/server
Author SHA1 Message Date
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
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
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
733db0c9cf
fix: enforce context manager usage for RequestResponder 2025-02-04 20:13:26 +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
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
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
David Soria Parra
53bfac0cc2
fix: make progress_token check E711 compat 2025-01-29 10:01:56 +00:00
Thomas Sheffler
76325b7846 progress_token is 0 on first tool-call and the return is taken mistakenly 2025-01-27 19:04:20 -08: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
Thomas Sheffler
7a64d8f9af async and await for logging in fastmcp 2025-01-25 07:03:20 -08:00
David Soria Parra
0a93799068
refactor: extract request and notification handling into separate methods 2025-01-24 09:52:20 +00:00
David Soria Parra
0cb3b26514
Merge pull request #157 from micpst/async-resources
feat: add async resources for FastMCP
2025-01-22 13:37:41 +00:00
Michał Pstrąg
c184b7a8db fix fastmcp logger debug 2025-01-18 19:59:51 +01:00
Michał Pstrąg
f5f19b2361 add support for async resources 2025-01-18 19:37:39 +01:00
Salman Mohammed
bc6746e89b Add instructions field to ServerSession and FastMCP 2025-01-13 13:00:11 -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
58bc32e559
merge: Resolve conflicts from v1.1.x merge 2025-01-03 16:06:51 +00:00
David Soria Parra
e21e8c157d
style: Fix import sorting and update ruff version 2025-01-03 15:57:14 +00:00
restlessronin
3de4dc1f13
feat: add version string parameter to Server constructor 2025-01-02 09:11:07 +00:00
restlessronin
34a257147b
chore: revert doc changes 2025-01-02 09:11:07 +00:00
restlessronin
937c640f04
feat: add version string parameter to 'create_initialization_options' 2025-01-02 09:11:07 +00:00
Allen Porter
247aec9332 Update paths in examples 2024-12-30 10:09:42 -08:00
Allen Porter
1134421a3a Fix inconsistencies in examples 2024-12-30 10:08:57 -08:00
Allen Porter
0970ef4ae0 Fix SSE server bug with uncaught TypeError 2024-12-30 10:04:19 -08:00
David Soria Parra
59fff69c38
Merge pull request #106 from modelcontextprotocol/davidsp/fastmcp
feat: Integrate FastMCP
2024-12-23 16:00:53 +00:00
David Soria Parra
52e69efa6f
Fix deprecation warning 2024-12-21 23:16:25 +00:00
David Soria Parra
0b09fa5944
fix type issues 2024-12-21 00:46:37 +00:00
David Soria Parra
a79f51f55f
style: Fix imports and line length formatting 2024-12-21 00:46:36 +00:00
David Soria Parra
557e90d2e7
Integrate FastMCP
This commit integrates FastMCP, a high-level MCP server implementation originally written by Jeremiah Lowin,
into the official MCP SDK. It also updates dependencies and adds new dev dependencies.
It moves the existing SDK into a .lowlevel .
2024-12-21 00:41:38 +00:00
David Soria Parra
edb37c8dc0
Fix deprecation warning 2024-12-12 23:18:52 +00:00
David Soria Parra
587dbb739d
Add handler for resource templates
We missed to have a handler for resource templates. We add this
now. One caveat is still that the `uriTemplate` in `ResourceTemplate`
is not a pydantic type.
2024-11-27 23:01:11 +00:00
Justin Spahr-Summers
c6d3bdce0f
Fix experimental capabilities example
See discussion in https://github.com/modelcontextprotocol/specification/pull/65.
2024-11-26 08:28:03 -06:00
David Soria Parra
873f6bf03e
Merge pull request #62 from modelcontextprotocol/davidsp/error-fixes
Handle MCPErrors separately
2024-11-25 14:15:06 +00:00
David Soria Parra
33f0e590c8
Add a simple module documentation to help LLMs with the pattern
LLMs have issue infering the actual usage pattern from the code
itself. We add a simple module documentation to help with that.
2024-11-25 13:56:38 +00:00
David Soria Parra
f7e47f39c2
Correct comment 2024-11-22 22:54:35 +00:00
David Soria Parra
afe1c0913a
When any handler raises an McpError, we pass it as a response 2024-11-22 22:54:35 +00:00
David Soria Parra
07d3b2fca5
fix return values of tools 2024-11-20 11:24:18 +00:00
David Soria Parra
76a0b80c4c
feat: add client capability checking to ServerSession
Add methods to track and verify client capabilities during initialization. This
includes storing client parameters from the initialize request and providing a
check_client_capability method to verify if specific capabilities are supported
by the connected client.
2024-11-11 21:53:34 +00:00
David Soria Parra
1177a11910
Return a specific server session instance of request context
We currently return a generic instance of RequestContext without
a specialization on the Session type. This makes it impossible
for servers to typesafe call `list_roots()` and other methods.

We now return a specific instance of `RequestContext[ServerSession]`
2024-11-11 21:11:13 +00:00
David Soria Parra
ec8c85edea
run ruff 2024-11-11 20:42:46 +00:00
David Soria Parra
b9b44e6dad
Don't re-export types
We will be a bit more low level and expect callees to import mcp.types
instead of relying in re-exported types. This makes usage more explicit
and avoids potential collisions in mcp.server.
2024-11-11 20:39:33 +00:00
David Soria Parra
f5d82bd229
Remove helper types
The helper types in mcp.server.types got really confusioning during
implementation as they overlapped with mcp.types. I now believe it
is better if we stay more low level to the spec types.

To do this, we now only use mcp.types everywhere. We renamed mcp.server.types
to mcp.server.models and removed it to the absolute minimum.
2024-11-11 20:05:51 +00:00
David Soria Parra
ed87ae9f06
rename mcp_python to mcp 2024-11-11 12:40:32 +00:00