Skip to content

Commit d51726a

Browse files
Merge branch 'main' into patch-1
2 parents dec2883 + 3e0ab1e commit d51726a

File tree

4 files changed

+14
-12
lines changed

4 files changed

+14
-12
lines changed

examples/clients/simple-chatbot/mcp_simple_chatbot/main.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class Configuration:
2323
def __init__(self) -> None:
2424
"""Initialize configuration with environment variables."""
2525
self.load_env()
26-
self.api_key = os.getenv("GROQ_API_KEY")
26+
self.api_key = os.getenv("LLM_API_KEY")
2727

2828
@staticmethod
2929
def load_env() -> None:

src/mcp/server/fastmcp/server.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from mcp.server.session import ServerSession
3838
from mcp.server.sse import SseServerTransport
3939
from mcp.server.stdio import stdio_server
40-
from mcp.shared.context import RequestContext
40+
from mcp.shared.context import LifespanContextT, RequestContext
4141
from mcp.types import (
4242
AnyFunction,
4343
EmbeddedResource,
@@ -564,7 +564,7 @@ def _convert_to_content(
564564
return [TextContent(type="text", text=result)]
565565

566566

567-
class Context(BaseModel):
567+
class Context(BaseModel, Generic[LifespanContextT]):
568568
"""Context object providing access to MCP capabilities.
569569
570570
This provides a cleaner interface to MCP's RequestContext functionality.
@@ -598,13 +598,13 @@ def my_tool(x: int, ctx: Context) -> str:
598598
The context is optional - tools that don't need it can omit the parameter.
599599
"""
600600

601-
_request_context: RequestContext[ServerSession, Any] | None
601+
_request_context: RequestContext[ServerSession, LifespanContextT] | None
602602
_fastmcp: FastMCP | None
603603

604604
def __init__(
605605
self,
606606
*,
607-
request_context: RequestContext | None = None,
607+
request_context: RequestContext[ServerSession, LifespanContextT] | None = None,
608608
fastmcp: FastMCP | None = None,
609609
**kwargs: Any,
610610
):
@@ -620,7 +620,7 @@ def fastmcp(self) -> FastMCP:
620620
return self._fastmcp
621621

622622
@property
623-
def request_context(self) -> RequestContext:
623+
def request_context(self) -> RequestContext[ServerSession, LifespanContextT]:
624624
"""Access to the underlying request context."""
625625
if self._request_context is None:
626626
raise ValueError("Context is not available outside of a request")

src/mcp/shared/context.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from dataclasses import dataclass
2-
from typing import Generic, TypeVar
2+
from typing import Any, Generic
3+
4+
from typing_extensions import TypeVar
35

46
from mcp.shared.session import BaseSession
57
from mcp.types import RequestId, RequestParams
68

7-
SessionT = TypeVar("SessionT", bound=BaseSession)
8-
LifespanContextT = TypeVar("LifespanContextT")
9+
SessionT = TypeVar("SessionT", bound=BaseSession[Any, Any, Any, Any, Any])
10+
LifespanContextT = TypeVar("LifespanContextT", default=None)
911

1012

1113
@dataclass

src/mcp/shared/session.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import httpx
99
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
1010
from pydantic import BaseModel
11+
from typing_extensions import Self
1112

1213
from mcp.shared.exceptions import McpError
1314
from mcp.types import (
@@ -60,7 +61,7 @@ def __init__(
6061
request_id: RequestId,
6162
request_meta: RequestParams.Meta | None,
6263
request: ReceiveRequestT,
63-
session: "BaseSession",
64+
session: "BaseSession[SendRequestT, SendNotificationT, SendResultT, ReceiveRequestT, ReceiveNotificationT]",
6465
on_complete: Callable[["RequestResponder[ReceiveRequestT, SendResultT]"], Any],
6566
) -> None:
6667
self.request_id = request_id
@@ -134,7 +135,6 @@ def cancelled(self) -> bool:
134135

135136

136137
class BaseSession(
137-
AbstractAsyncContextManager,
138138
Generic[
139139
SendRequestT,
140140
SendNotificationT,
@@ -183,7 +183,7 @@ def __init__(
183183
]()
184184
)
185185

186-
async def __aenter__(self):
186+
async def __aenter__(self) -> Self:
187187
self._task_group = anyio.create_task_group()
188188
await self._task_group.__aenter__()
189189
self._task_group.start_soon(self._receive_loop)

0 commit comments

Comments
 (0)