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 को लौटाता है:
| Action | Description |
|---|
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)
Last modified on April 11, 2026