mirror of
https://github.com/aljazceru/mcp-python-sdk.git
synced 2025-12-19 14:54:24 +01:00
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
This commit is contained in:
28
tests/shared/test_memory.py
Normal file
28
tests/shared/test_memory.py
Normal file
@@ -0,0 +1,28 @@
|
||||
import pytest
|
||||
from typing_extensions import AsyncGenerator
|
||||
|
||||
from mcp_python.client.session import ClientSession
|
||||
from mcp_python.server import Server
|
||||
from mcp_python.shared.memory import (
|
||||
create_connected_server_and_client_session,
|
||||
)
|
||||
from mcp_python.types import (
|
||||
EmptyResult,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def client_connected_to_server(
|
||||
mcp_server: Server,
|
||||
) -> AsyncGenerator[ClientSession, None]:
|
||||
async with create_connected_server_and_client_session(mcp_server) as client_session:
|
||||
yield client_session
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_memory_server_and_client_connection(
|
||||
client_connected_to_server: ClientSession,
|
||||
):
|
||||
"""Shows how a client and server can communicate over memory streams."""
|
||||
response = await client_connected_to_server.send_ping()
|
||||
assert isinstance(response, EmptyResult)
|
||||
Reference in New Issue
Block a user