* 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
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.
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.
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.