Commit Graph

355 Commits

Author SHA1 Message Date
Samuel Colvin
3775916c5c lint docs examples (#286)
* lint docs examples

* format
2025-03-14 11:30:57 +00:00
Marcelo Trylesinski
97201cce59 Strict types on the client side (#285) 2025-03-14 10:56:48 +00:00
Marcelo Trylesinski
7196604468 Revert "refactor: reorganize message handling for better type safety and clar…" (#282)
This reverts commit 9d0f2daddb.
2025-03-14 09:50:46 +00:00
john0312
ebb81d3b2b Update README to clarify installing mcp to project vs running mcp (#277)
uv add is for adding dependency to uv managed python projects, and folks
not familiar with uv may mistaken the command for running mcp. Added
wordings that clarifies this.
2025-03-13 14:35:53 +00:00
David Soria Parra
9d0f2daddb refactor: reorganize message handling for better type safety and clarity (#239)
* refactor: improve typing with memory stream type aliases

Move memory stream type definitions to models.py and use them throughout
the codebase for better type safety and maintainability.

GitHub-Issue:#201

* refactor: move streams to ParsedMessage

* refactor: update test files to use ParsedMessage

Updates test files to work with the ParsedMessage stream type aliases
and fixes a line length issue in test_201_client_hangs_on_logging.py.

Github-Issue:#201

* refactor: rename ParsedMessage to MessageFrame for clarity

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>

* refactor: move MessageFrame class to types.py for better code organization

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>

* fix pyright

* refactor: update websocket client to use MessageFrame

Modified the websocket client to work with the new MessageFrame type,
preserving raw message text and properly extracting the root JSON-RPC
message when sending.

Github-Issue:#204

* fix: use NoneType instead of None for type parameters in MessageFrame

🤖 Generated with [Claude Code](https://claude.ai/code)

* refactor: rename root to message
2025-03-13 13:44:55 +00:00
Michaelzag
ad7f7a5473 Changed default log level to error (#258) 2025-03-13 13:16:21 +00:00
Marcelo Trylesinski
1669a3af01 Release on GitHub release (#276) 2025-03-13 13:09:18 +00:00
Mariusz Woloszyn
5c9f688d95 Add support for Linux configuration path in get_claude_config_path (#270)
* feat: add support for Linux configuration path in get_claude_config_path

* On Linux use XDG_CONFIG_HOME environment variable and fall back to $HOME/.config

* update Linux config path to include 'Claude' directory

* fix: format

---------

Co-authored-by: David Soria Parra <davidsp@anthropic.com>
2025-03-13 11:46:06 +00:00
Marcelo Trylesinski
94d326dbf1 Close unclosed resources in the whole project (#267)
* Close resources

* Close all resources

* Update pyproject.toml

* Close all resources

* Close all resources

* try now...

* try to ignore this

* try again

* try adding one more..

* try now

* try now

* revert ci changes
2025-03-13 10:59:45 +00:00
Jerome
1691b905e2 Merge pull request #179 from smithery-ai/patch-1
Create Client websocket.py
2025-03-12 22:53:22 +00:00
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
2bcca39aae Update lock 2025-03-12 13:51:35 -07:00
Marcelo Trylesinski
e756315dea Add ServerSessionT type var to Context (#271)
* Add ServerSessionT type var to Context

* Passing locally

* Try now
2025-03-12 15:35:15 +00:00
David Soria Parra
78fc5c12c0 fix: fix ci 2025-03-12 14:22:30 +00: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