मुख्य सामग्री पर जाएं
Servers tool निष्पादन के दौरान elicitation के माध्यम से उपयोगकर्ता इनपुट का अनुरोध कर सकते हैं। Client handler JSON schema के अनुरूप इनपुट एकत्र करता है और उसे server को वापस भेज देता है।

हैंडलर

from dedalus_mcp.client import ClientCapabilitiesConfig, open_connection
from dedalus_mcp.types import (
    ElicitRequestParams,
    ElicitResult,
    ErrorData,
)

async def elicitation_handler(
    context: object,
    params: ElicitRequestParams,
) -> ElicitResult | ErrorData:
    """सर्वर से elicitation अनुरोधों को हैंडल करें।"""
    print(f"\nServer requests input: {params.message}")

    # स्कीमा में प्रत्येक फ़ील्ड के लिए मान एकत्र करें
    content = {}
    schema = params.requestedSchema
    properties = schema.get("properties", {})
    required = schema.get("required", [])

    for field, field_schema in properties.items():
        field_type = field_schema.get("type", "string")
        is_required = field in required

        value = input(f"{field} ({field_type}): ")

        if not value and is_required:
            return ElicitResult(action="decline")

        # टाइप coercion
        if field_type == "boolean":
            content[field] = value.lower() in ("true", "yes", "1", "y")
        elif field_type == "integer":
            content[field] = int(value)
        elif field_type == "number":
            content[field] = float(value)
        else:
            content[field] = value

    return ElicitResult(action="accept", content=content)

उपयोग

capabilities = ClientCapabilitiesConfig(elicitation=elicitation_handler)

async with open_connection(
    url="http://127.0.0.1:8000/mcp",
    transport="streamable-http",
    capabilities=capabilities,
) as client:
    # सर्वर अब tool निष्पादन के दौरान उपयोगकर्ता इनपुट का अनुरोध कर सकता है
    result = await client.call_tool("deploy", {"env": "production"})

Actions

हैंडलर निम्न में से किसी एक action को लौटाता है:
ActionDescription
acceptएकत्रित कंटेंट को सर्वर पर सबमिट करें
declineवर्कफ़्लो को रद्द किए बिना रिक्वेस्ट को अस्वीकार करें
cancelऑपरेशन को पूरी तरह समाप्त कर दें
# Accept with content
return ElicitResult(action="accept", content={"confirmed": True})

# अस्वीकार करें (उपयोगकर्ता ने इनकार किया)
return ElicitResult(action="decline")

# Cancel (abort operation)
return ElicitResult(action="cancel")

ऑटो-एक्सेप्ट उदाहरण

गैर-इंटरैक्टिव परिवेशों के लिए, डिफ़ॉल्ट मानों के साथ ऑटो-एक्सेप्ट सक्षम करें:
async def elicitation_handler(context, params):
    """परीक्षण के लिए डिफ़ॉल्ट मानों के साथ स्वतः-स्वीकृति।"""
    content = {}
    properties = params.requestedSchema.get("properties", {})

    for field, schema in properties.items():
        field_type = schema.get("type", "string")
        if field_type == "boolean":
            content[field] = True
        elif field_type in ("integer", "number"):
            content[field] = 0
        else:
            content[field] = "auto-filled"

    return ElicitResult(action="accept", content=content)