from dedalus_mcp import MCPServer, tool
@tool(description="दो संख्याएँ जोड़ें")
def add(a: int, b: int) -> int:
return a + b
server = MCPServer("calculator")
server.collect(add)
if __name__ == "__main__":
import asyncio
asyncio.run(server.serve())
टाइप हिंट अपने‑आप JSON Schema में बदल जाते हैं। collect() के साथ टूल्स को रजिस्टर करें। यही पैटर्न resources और prompts के लिए भी काम करता है।
सर्वर का नाम आपके slug से मेल खाना चाहिए। MCPServer("my-server") में दिया गया name आपके deployment slug और ctx.dispatch() कॉल्स से मेल खाना चाहिए। इससे OAuth callbacks और request routing के सही तरीके से काम करने की गारंटी मिलती है।
मॉडल कॉन्टेक्स्ट प्रोटोकॉल (MCP) इंटीग्रेशन बहुत आसान है। सर्वरों को सीधे mcp_servers को पास करें:
from dedalus_labs import AsyncDedalus, DedalusRunner
client = AsyncDedalus()
runner = DedalusRunner(client)
# होस्ट किया गया MCP सर्वर (मार्केटप्लेस स्लग)
response = await runner.run(
input="Search for authentication docs",
model="anthropic/claude-sonnet-4-20250514",
mcp_servers=["your-org/your-server"],
)
# Local MCP server URL
response = await runner.run(
input="Search for authentication docs",
model="anthropic/claude-sonnet-4-20250514",
mcp_servers=["http://localhost:8000/mcp"],
)
बस इतना ही। SDK (सॉफ्टवेयर डेवलपमेंट किट) कनेक्शन, tool खोज और निष्पादन अपने‑आप संभालता है।
MCP सर्वर तीन प्रकार की क्षमताएँ एक्सपोज़ करते हैं:
| प्रिमिटिव | नियंत्रण | विवरण |
|---|
| टूल्स | मॉडल | वे फ़ंक्शन जिन्हें LLM तर्क‑प्रक्रिया के दौरान कॉल करता है। |
| Resources | मॉडल/उपयोगकर्ता | डेटा जिसे LLM संदर्भ के लिए पढ़ सकता है। |
| Prompts | उपयोगकर्ता | संदेश टेम्पलेट जिन्हें उपयोगकर्ता चुनते और रेंडर करते हैं। |
टूल्स मॉडल‑नियंत्रित होते हैं: LLM तय करता है कि इन्हें कब कॉल करना है। Prompts उपयोगकर्ता‑नियंत्रित होते हैं: उपयोगकर्ता चुनते हैं कि कौन‑सा prompt चलाना है। Resources दोनों में से किसी के भी नियंत्रण में हो सकते हैं।
| क्षमता | कैसे |
|---|
| Progress | लंबे समय तक चलने वाले कार्यों के लिए ctx.progress() का उपयोग |
| Logging | ctx.info(), ctx.debug(), आदि |
| Cancellation | ctx.cancelled फ़्लैग |