mirror of
https://github.com/aljazceru/mcp-python-sdk.git
synced 2025-12-21 07:44:24 +01:00
Merge branch 'main' into patch-1
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user