refactor: replace lowlevel Server decorators with on_* constructor kwargs (#1985)
This commit is contained in:
parent
d6d3ad9a7c
commit
0a22a9dc33
1 changed files with 3563 additions and 5481 deletions
|
|
@ -10,6 +10,7 @@ import json
|
|||
import logging
|
||||
|
||||
import click
|
||||
from mcp.server import ServerRequestContext
|
||||
from mcp.server.mcpserver import Context, MCPServer
|
||||
from mcp.server.mcpserver.prompts.base import UserMessage
|
||||
from mcp.server.session import ServerSession
|
||||
|
|
@ -20,13 +21,17 @@ from mcp.types import (
|
|||
CompletionArgument,
|
||||
CompletionContext,
|
||||
EmbeddedResource,
|
||||
EmptyResult,
|
||||
ImageContent,
|
||||
JSONRPCMessage,
|
||||
PromptReference,
|
||||
ResourceTemplateReference,
|
||||
SamplingMessage,
|
||||
SetLevelRequestParams,
|
||||
SubscribeRequestParams,
|
||||
TextContent,
|
||||
TextResourceContents,
|
||||
UnsubscribeRequestParams,
|
||||
)
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
|
@ -393,28 +398,29 @@ def test_prompt_with_image() -> list[UserMessage]:
|
|||
# Custom request handlers
|
||||
# TODO(felix): Add public APIs to MCPServer for subscribe_resource, unsubscribe_resource,
|
||||
# and set_logging_level to avoid accessing protected _lowlevel_server attribute.
|
||||
@mcp._lowlevel_server.set_logging_level() # pyright: ignore[reportPrivateUsage]
|
||||
async def handle_set_logging_level(level: str) -> None:
|
||||
async def handle_set_logging_level(ctx: ServerRequestContext, params: SetLevelRequestParams) -> EmptyResult:
|
||||
"""Handle logging level changes"""
|
||||
logger.info(f"Log level set to: {level}")
|
||||
# In a real implementation, you would adjust the logging level here
|
||||
# For conformance testing, we just acknowledge the request
|
||||
logger.info(f"Log level set to: {params.level}")
|
||||
return EmptyResult()
|
||||
|
||||
|
||||
async def handle_subscribe(uri: str) -> None:
|
||||
async def handle_subscribe(ctx: ServerRequestContext, params: SubscribeRequestParams) -> EmptyResult:
|
||||
"""Handle resource subscription"""
|
||||
resource_subscriptions.add(str(uri))
|
||||
logger.info(f"Subscribed to resource: {uri}")
|
||||
resource_subscriptions.add(str(params.uri))
|
||||
logger.info(f"Subscribed to resource: {params.uri}")
|
||||
return EmptyResult()
|
||||
|
||||
|
||||
async def handle_unsubscribe(uri: str) -> None:
|
||||
async def handle_unsubscribe(ctx: ServerRequestContext, params: UnsubscribeRequestParams) -> EmptyResult:
|
||||
"""Handle resource unsubscription"""
|
||||
resource_subscriptions.discard(str(uri))
|
||||
logger.info(f"Unsubscribed from resource: {uri}")
|
||||
resource_subscriptions.discard(str(params.uri))
|
||||
logger.info(f"Unsubscribed from resource: {params.uri}")
|
||||
return EmptyResult()
|
||||
|
||||
|
||||
mcp._lowlevel_server.subscribe_resource()(handle_subscribe) # pyright: ignore[reportPrivateUsage]
|
||||
mcp._lowlevel_server.unsubscribe_resource()(handle_unsubscribe) # pyright: ignore[reportPrivateUsage]
|
||||
mcp._lowlevel_server._add_request_handler("logging/setLevel", handle_set_logging_level) # pyright: ignore[reportPrivateUsage]
|
||||
mcp._lowlevel_server._add_request_handler("resources/subscribe", handle_subscribe) # pyright: ignore[reportPrivateUsage]
|
||||
mcp._lowlevel_server._add_request_handler("resources/unsubscribe", handle_unsubscribe) # pyright: ignore[reportPrivateUsage]
|
||||
|
||||
|
||||
@mcp.completion()
|
||||
|
|
|
|||
Loading…
Reference in a new issue