mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-09 23:29:10 +02:00
Tasks belong in capabilities.tasks (first-class field) per SEP-1686, not capabilities.experimental.tasks. This fixes VS Code Copilot 1.107+ integration which checks capabilities.tasks?.requests?.tools?.call. Changes: - Update get_task_capabilities() to return ServerTasksCapability types - Override get_capabilities() in LowLevelServer to set tasks field - Remove experimental_capabilities parameter usage - Update test to verify correct location Fixes #2870
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
"""
|
|
Tests for SEP-1686 task capabilities declaration.
|
|
|
|
Verifies that the server correctly advertises task support.
|
|
Task protocol is now always enabled.
|
|
"""
|
|
|
|
from fastmcp import FastMCP
|
|
from fastmcp.client import Client
|
|
from fastmcp.server.tasks import get_task_capabilities
|
|
|
|
|
|
async def test_capabilities_include_tasks():
|
|
"""Server capabilities always include tasks in first-class field (SEP-1686)."""
|
|
mcp = FastMCP("capability-test")
|
|
|
|
@mcp.tool()
|
|
async def test_tool() -> str:
|
|
return "test"
|
|
|
|
async with Client(mcp) as client:
|
|
# Get server initialization result which includes capabilities
|
|
init_result = client.initialize_result
|
|
|
|
# Verify tasks capability is present as a first-class field (not experimental)
|
|
assert init_result.capabilities.tasks is not None
|
|
assert init_result.capabilities.tasks == get_task_capabilities()
|
|
# Verify it's NOT in experimental
|
|
assert "tasks" not in (init_result.capabilities.experimental or {})
|
|
|
|
|
|
async def test_client_uses_task_capable_session():
|
|
"""Client uses task-capable initialization."""
|
|
mcp = FastMCP("client-cap-test")
|
|
|
|
@mcp.tool()
|
|
async def test_tool() -> str:
|
|
return "test"
|
|
|
|
async with Client(mcp) as client:
|
|
# Client should have connected successfully with task capabilities
|
|
assert client.initialize_result is not None
|
|
# Session should be a ClientSession (task-capable init uses standard session)
|
|
assert type(client.session).__name__ == "ClientSession"
|