Merge branch 'main' into patch-1

This commit is contained in:
Jerome
2025-03-12 09:31:56 +00:00
committed by GitHub
4 changed files with 14 additions and 12 deletions

View File

@@ -23,7 +23,7 @@ class Configuration:
def __init__(self) -> None: def __init__(self) -> None:
"""Initialize configuration with environment variables.""" """Initialize configuration with environment variables."""
self.load_env() self.load_env()
self.api_key = os.getenv("GROQ_API_KEY") self.api_key = os.getenv("LLM_API_KEY")
@staticmethod @staticmethod
def load_env() -> None: def load_env() -> None:

View File

@@ -37,7 +37,7 @@ from mcp.server.lowlevel.server import (
from mcp.server.session import ServerSession from mcp.server.session import ServerSession
from mcp.server.sse import SseServerTransport from mcp.server.sse import SseServerTransport
from mcp.server.stdio import stdio_server from mcp.server.stdio import stdio_server
from mcp.shared.context import RequestContext from mcp.shared.context import LifespanContextT, RequestContext
from mcp.types import ( from mcp.types import (
AnyFunction, AnyFunction,
EmbeddedResource, EmbeddedResource,
@@ -564,7 +564,7 @@ def _convert_to_content(
return [TextContent(type="text", text=result)] return [TextContent(type="text", text=result)]
class Context(BaseModel): class Context(BaseModel, Generic[LifespanContextT]):
"""Context object providing access to MCP capabilities. """Context object providing access to MCP capabilities.
This provides a cleaner interface to MCP's RequestContext functionality. This provides a cleaner interface to MCP's RequestContext functionality.
@@ -598,13 +598,13 @@ class Context(BaseModel):
The context is optional - tools that don't need it can omit the parameter. The context is optional - tools that don't need it can omit the parameter.
""" """
_request_context: RequestContext[ServerSession, Any] | None _request_context: RequestContext[ServerSession, LifespanContextT] | None
_fastmcp: FastMCP | None _fastmcp: FastMCP | None
def __init__( def __init__(
self, self,
*, *,
request_context: RequestContext | None = None, request_context: RequestContext[ServerSession, LifespanContextT] | None = None,
fastmcp: FastMCP | None = None, fastmcp: FastMCP | None = None,
**kwargs: Any, **kwargs: Any,
): ):
@@ -620,7 +620,7 @@ class Context(BaseModel):
return self._fastmcp return self._fastmcp
@property @property
def request_context(self) -> RequestContext: def request_context(self) -> RequestContext[ServerSession, LifespanContextT]:
"""Access to the underlying request context.""" """Access to the underlying request context."""
if self._request_context is None: if self._request_context is None:
raise ValueError("Context is not available outside of a request") raise ValueError("Context is not available outside of a request")

View File

@@ -1,11 +1,13 @@
from dataclasses import dataclass from dataclasses import dataclass
from typing import Generic, TypeVar from typing import Any, Generic
from typing_extensions import TypeVar
from mcp.shared.session import BaseSession from mcp.shared.session import BaseSession
from mcp.types import RequestId, RequestParams from mcp.types import RequestId, RequestParams
SessionT = TypeVar("SessionT", bound=BaseSession) SessionT = TypeVar("SessionT", bound=BaseSession[Any, Any, Any, Any, Any])
LifespanContextT = TypeVar("LifespanContextT") LifespanContextT = TypeVar("LifespanContextT", default=None)
@dataclass @dataclass

View File

@@ -8,6 +8,7 @@ import anyio.lowlevel
import httpx import httpx
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
from pydantic import BaseModel from pydantic import BaseModel
from typing_extensions import Self
from mcp.shared.exceptions import McpError from mcp.shared.exceptions import McpError
from mcp.types import ( from mcp.types import (
@@ -60,7 +61,7 @@ class RequestResponder(Generic[ReceiveRequestT, SendResultT]):
request_id: RequestId, request_id: RequestId,
request_meta: RequestParams.Meta | None, request_meta: RequestParams.Meta | None,
request: ReceiveRequestT, request: ReceiveRequestT,
session: "BaseSession", session: "BaseSession[SendRequestT, SendNotificationT, SendResultT, ReceiveRequestT, ReceiveNotificationT]",
on_complete: Callable[["RequestResponder[ReceiveRequestT, SendResultT]"], Any], on_complete: Callable[["RequestResponder[ReceiveRequestT, SendResultT]"], Any],
) -> None: ) -> None:
self.request_id = request_id self.request_id = request_id
@@ -134,7 +135,6 @@ class RequestResponder(Generic[ReceiveRequestT, SendResultT]):
class BaseSession( class BaseSession(
AbstractAsyncContextManager,
Generic[ Generic[
SendRequestT, SendRequestT,
SendNotificationT, SendNotificationT,
@@ -183,7 +183,7 @@ class BaseSession(
]() ]()
) )
async def __aenter__(self): async def __aenter__(self) -> Self:
self._task_group = anyio.create_task_group() self._task_group = anyio.create_task_group()
await self._task_group.__aenter__() await self._task_group.__aenter__()
self._task_group.start_soon(self._receive_loop) self._task_group.start_soon(self._receive_loop)