Skip to content

Commit 77ad8f2

Browse files
committed
Allow passing initialization options to a session
We need a way for servers to pass initialization options to the session. This is the beginning of this.
1 parent ac6064b commit 77ad8f2

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

mcp_python/server/__main__.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import logging
22
import sys
3-
3+
import importlib.metadata
44
import anyio
55

6-
from mcp_python.server.session import ServerSession
6+
from mcp_python.server.session import InitializationOptions, ServerSession
77
from mcp_python.server.stdio import stdio_server
8+
from mcp_python.types import ServerCapabilities
89

910
if not sys.warnoptions:
1011
import warnings
@@ -26,8 +27,9 @@ async def receive_loop(session: ServerSession):
2627

2728

2829
async def main():
30+
version = importlib.metadata.version("mcp_python")
2931
async with stdio_server() as (read_stream, write_stream):
30-
async with ServerSession(read_stream, write_stream) as session, write_stream:
32+
async with ServerSession(read_stream, write_stream, InitializationOptions(server_name="mcp_python", server_version=version, capabilities=ServerCapabilities())) as session, write_stream:
3133
await receive_loop(session)
3234

3335

mcp_python/server/session.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from enum import Enum
22
from typing import Any
3+
from dataclasses import dataclass
34

45
import anyio
56
import anyio.lowlevel
@@ -37,6 +38,12 @@ class InitializationState(Enum):
3738
Initialized = 3
3839

3940

41+
@dataclass
42+
class InitializationOptions:
43+
server_name: str
44+
server_version: str
45+
capabilities: ServerCapabilities
46+
4047
class ServerSession(
4148
BaseSession[
4249
ServerRequest,
@@ -52,9 +59,11 @@ def __init__(
5259
self,
5360
read_stream: MemoryObjectReceiveStream[JSONRPCMessage | Exception],
5461
write_stream: MemoryObjectSendStream[JSONRPCMessage],
62+
init_options: InitializationOptions
5563
) -> None:
5664
super().__init__(read_stream, write_stream, ClientRequest, ClientNotification)
5765
self._initialization_state = InitializationState.NotInitialized
66+
self._init_options = init_options
5867

5968
async def _received_request(
6069
self, responder: RequestResponder[ClientRequest, ServerResult]
@@ -66,15 +75,10 @@ async def _received_request(
6675
ServerResult(
6776
InitializeResult(
6877
protocolVersion=SUPPORTED_PROTOCOL_VERSION,
69-
capabilities=ServerCapabilities(
70-
logging=None,
71-
resources=None,
72-
tools=None,
73-
experimental=None,
74-
prompts={},
75-
),
78+
capabilities=self._init_options.capabilities,
7679
serverInfo=Implementation(
77-
name="mcp_python", version="0.1.0"
80+
name=self._init_options.server_name,
81+
version=self._init_options.server_version
7882
),
7983
)
8084
)

tests/server/test_session.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
import pytest
33

44
from mcp_python.client.session import ClientSession
5-
from mcp_python.server.session import ServerSession
5+
from mcp_python.server.session import InitializationOptions, ServerSession
66
from mcp_python.types import (
77
ClientNotification,
88
InitializedNotification,
99
JSONRPCMessage,
10+
ServerCapabilities,
1011
)
1112

1213

@@ -30,7 +31,7 @@ async def run_server():
3031
nonlocal received_initialized
3132

3233
async with ServerSession(
33-
client_to_server_receive, server_to_client_send
34+
client_to_server_receive, server_to_client_send, InitializationOptions(server_name='mcp_python', server_version='0.1.0', capabilities=ServerCapabilities())
3435
) as server_session:
3536
async for message in server_session.incoming_messages:
3637
if isinstance(message, Exception):

0 commit comments

Comments
 (0)