Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions src/mcp/server/mcpserver/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
from mcp.server.context import LifespanContextT, RequestT, ServerRequestContext
from mcp.server.elicitation import ElicitationResult, ElicitSchemaModelT, UrlElicitationResult, elicit_with_validation
from mcp.server.elicitation import elicit_url as _elicit_url
from mcp.server.experimental.task_support import TaskSupport
from mcp.server.lowlevel.helper_types import ReadResourceContents
from mcp.server.lowlevel.server import LifespanResultT, Server
from mcp.server.lowlevel.server import lifespan as default_lifespan
Expand All @@ -42,6 +43,8 @@
from mcp.server.streamable_http import EventStore
from mcp.server.streamable_http_manager import StreamableHTTPSessionManager
from mcp.server.transport_security import TransportSecuritySettings
from mcp.shared.experimental.tasks.message_queue import TaskMessageQueue
from mcp.shared.experimental.tasks.store import TaskStore
from mcp.types import Annotations, ContentBlock, GetPromptResult, Icon, ToolAnnotations
from mcp.types import Prompt as MCPPrompt
from mcp.types import PromptArgument as MCPPromptArgument
Expand Down Expand Up @@ -488,6 +491,17 @@ async def handle_completion(ref, argument, context):
"""
return self._lowlevel_server.completion()

def enable_tasks(
self,
store: TaskStore | None = None,
queue: TaskMessageQueue | None = None,
) -> TaskSupport:
"""Enable experimental task support.

WARNING: This API is experimental and may change without notice.
"""
return self._lowlevel_server.experimental.enable_tasks(store=store, queue=queue)

def add_resource(self, resource: Resource) -> None:
"""Add a resource to the server.

Expand Down
13 changes: 13 additions & 0 deletions tests/experimental/tasks/test_spec_compliance.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,19 @@ async def handle_get(req: GetTaskRequest) -> GetTaskResult:
assert caps.tasks.requests.tools is not None


def test_mcpserver_enable_tasks_sets_capability() -> None:
"""MCPServer.enable_tasks() sets tasks.requests.tools.call capability."""
from mcp.server.mcpserver.server import MCPServer

mcp = MCPServer("test")
mcp.enable_tasks()
caps = _get_capabilities(mcp._lowlevel_server)
assert caps.tasks is not None
assert caps.tasks.requests is not None
assert caps.tasks.requests.tools is not None
assert caps.tasks.requests.tools.call is not None


class TestClientCapabilities:
"""Clients declare:
- tasks.list — supports listing operations
Expand Down