الدرس 8 من 10

الـ MCP

بروتوكول موحد لتوصيل الأدوات والبيانات بالموديلات.

المشكلة

عملت أدوات لمتجرك. عايز تستخدمها مع الـ agent بتاعك، ومع Claude Desktop، ومع أداة كتابة كود، ومع agent تاني في الشركة. من غير معيار موحد، هتعيد ربط الأدوات بكل واحد فيهم بطريقة مختلفة.

🔌 زي USB-Cقبل USB-C كل جهاز ليه شاحن. دلوقتي كابل واحد لكل حاجة. MCP (Model Context Protocol) هو USB-C للـ AI: تعمل MCP server فيه أدواتك مرة واحدة، وأي تطبيق بيدعم MCP يقدر يتوصل بيه ويستخدمها.
MCP server برنامج بيعرض أدوات وبيانات. انت اللي بتكتبه.
MCP client التطبيق اللي فيه الموديل وبيتوصل بالـ servers، زي Claude Desktop أو الـ agent بتاعك.
tools دوال الموديل يقدر ينفذها، زي اللي عملناها طول المسار.
resources بيانات للقراية، زي ملف أو صفحة توثيق.
prompts قوالب prompts جاهزة الـ server بيقدمها.

اعمل MCP server لمتجرك

terminal
pip install "mcp[cli]"
store_server.py
import json
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("egypt-store")

ORDERS = {"1024": {"status": "out for delivery", "eta": "today before 9 PM"},
          "1031": {"status": "delivered", "eta": None}}

@mcp.tool()
def get_order_status(order_id: str) -> str:
    """Get the status and delivery estimate of an order by its 4-digit number."""
    order = ORDERS.get(order_id)
    if order is None:
        return f"No order {order_id}. Ask the customer to double-check the number."
    return json.dumps(order)

@mcp.tool()
def shipping_cost(governorate: str, order_total: float) -> float:
    """Shipping cost in EGP. Orders above 1000 EGP ship free."""
    if order_total > 1000:
        return 0
    return 50 if governorate.lower() in ("cairo", "giza") else 75

@mcp.resource("policy://refunds")
def refund_policy() -> str:
    """The store's refund policy."""
    return "Returns within 14 days in original condition. Damaged items replaced free."

if __name__ == "__main__":
    mcp.run()

نفس فكرة الـ decorator اللي بنيناه في الدرس ٣: @mcp.tool() بيطلع الـ schema من الـ type hints والـ docstring. الفرق إن الأدوات دي بقت متاحة لأي client بيدعم MCP.

جرّبه واوصله

terminal
# Open the MCP Inspector: a web page to test your tools by hand
mcp dev store_server.py

# Install it into Claude Desktop, then ask Claude about order 1024
mcp install store_server.py
💡 مش لازم تكتب كل حاجةفيه MCP servers جاهزة كتير لخدمات مشهورة (ملفات، قواعد بيانات، أدوات شغل). قبل ما تبني، دوّر. وقبل ما تستخدم server من مصدر مش معروف، افتكر إنه بيشتغل بصلاحيات على جهازك أو حساباتك، فراجعه كويس.
⚠ الـ server بتاعك ممكن يتنادى من أي agentحط نفس الحمايات جوه الـ server نفسه: التحقق من المدخلات، والصلاحيات، والحدود. متعتمدش إن الـ client هو اللي هيحمي.
الدرس اللي فات