मुख्य सामग्री पर जाएं
टूल्स सर्वर-साइड फ़ंक्शन होते हैं जिन्हें Client आर्ग्यूमेंट्स के साथ चला सकता है। MCPClient के साथ, मूल फ़्लो इस प्रकार है:

टूल्स की सूची

सर्वर पर उपलब्ध टूल्स देखें:
from dedalus_mcp.client import open_connection

async with open_connection("http://127.0.0.1:8000/mcp") as client:
    tools = await client.list_tools()

    for tool in tools.tools:
        print(f"{tool.name}: {tool.description}")

Tool schema

प्रत्येक tool में निम्न शामिल होते हैं:
FieldTypeDescription
namestrtool पहचानकर्ता
descriptionstrtool क्या करता है
inputSchemadictआर्ग्युमेंट्स के लिए JSON Schema
for tool in tools.tools:
    print(f"Name: {tool.name}")
    print(f"Description: {tool.description}")
    print(f"Parameters schema: {tool.inputSchema}")

टूल्स कॉल करें

आर्ग्युमेंट्स के साथ किसी tool को execute करें:
result = await client.call_tool("add", {"a": 5, "b": 3})

# Tool के परिणाम content blocks होते हैं; अधिकांश tools TextContent रिटर्न करते हैं।
print(result.content[0].text)

त्रुटि प्रबंधन

यदि सर्वर कोई JSON-RPC त्रुटि लौटाता है (आमतौर पर जब कोई tool त्रुटि फेंकता है), तो call_tool(...) McpError फेंकता है:
from mcp.shared.exceptions import McpError

try:
    result = await client.call_tool("divide", {"a": 10, "b": 0})
    print(result.content[0].text)
except McpError as e:
    print(f"Tool call विफल रहा: {e}")

उदाहरण: कैलकुलेटर

import asyncio
from dedalus_mcp.client import MCPClient
from mcp.shared.exceptions import McpError

async def main():
    client = await MCPClient.connect("http://127.0.0.1:8000/mcp")
    try:
        tools = await client.list_tools()
        print("उपलब्ध उपकरण:")
        for tool in tools.tools:
            print(f"  - {tool.name}")

        add_result = await client.call_tool("add", {"a": 5, "b": 3})
        print(f"5 + 3 = {add_result.content[0].text}")

        mul_result = await client.call_tool("multiply", {"a": 4, "b": 7})
        print(f"4 * 7 = {mul_result.content[0].text}")

    except McpError as e:
        print(f"Tool call failed: {e}")
    finally:
        await client.close()

asyncio.run(main())

कॉन्टेक्स्ट मैनेजर

open_connection(...) एक async कॉन्टेक्स्ट मैनेजर है। इसका मतलब है कि आपको client.close() को await के साथ कॉल करना याद रखने की ज़रूरत नहीं है। जब async with ब्लॉक खत्म होता है, तो यह आपके लिए अपने आप अंडरलाइंग Connection को बंद कर देता है।
from dedalus_mcp.client import open_connection

async with open_connection("http://127.0.0.1:8000/mcp") as client:
    tools = await client.list_tools()
    result = await client.call_tool("greet", {"name": "World"})
    print(result.content[0].text)