--- title: elicitation sidebarTitle: elicitation --- # `fastmcp.server.tasks.elicitation` Background task elicitation support (SEP-1686). This module provides elicitation capabilities for background tasks running in Docket workers. Unlike regular MCP requests, background tasks don't have an active request context, so elicitation requires special handling: 1. Set task status to "input_required" via Redis 2. Send notifications/tasks/updated with elicitation metadata 3. Wait for client to send input via tasks/sendInput 4. Resume task execution with the provided input This uses the public MCP SDK APIs where possible, with minimal use of internal APIs for background task coordination. ## Functions ### `elicit_for_task` ```python elicit_for_task(task_id: str, session: ServerSession, message: str, schema: dict[str, Any], fastmcp: FastMCP) -> mcp.types.ElicitResult ``` Send an elicitation request from a background task. This function handles the complexity of eliciting user input when running in a Docket worker context where there's no active MCP request. **Args:** - `task_id`: The background task ID - `session`: The MCP ServerSession for this task - `message`: The message to display to the user - `schema`: The JSON schema for the expected response - `fastmcp`: The FastMCP server instance **Returns:** - ElicitResult containing the user's response **Raises:** - `RuntimeError`: If Docket is not available - `McpError`: If the elicitation request fails ### `handle_task_input` ```python handle_task_input(task_id: str, session_id: str, action: str, content: dict[str, Any] | None, fastmcp: FastMCP) -> bool ``` Handle input sent to a background task via tasks/sendInput. This is called when a client sends input in response to an elicitation request from a background task. **Args:** - `task_id`: The background task ID - `session_id`: The MCP session ID - `action`: The elicitation action ("accept", "decline", "cancel") - `content`: The response content (for "accept" action) - `fastmcp`: The FastMCP server instance **Returns:** - True if the input was successfully stored, False otherwise