المستخدم بيقولّك: "ابعت ملخص اجتماع بكره لـ 12 شخص على Slack، وحط النقاط الأساسية في تذكرة Linear". قبل MCP، الطلب ده بياخد أسبوع شغل: Slack OAuth + Linear REST + معالجة rate limits + كود ربط بين الأداتين. مع MCP، نفس السيناريو بيتعمل في 30 سطر Python، و Claude بيكتشف الأدوات لوحده بدون ما تعدّل سطر في الـ AI.
مستوى المقال: مبتدئ
MCP — البروتوكول اللي بيحوّل Claude من شات بوت لمساعد بيشتغل فعلاً
المشكلة باختصار
Claude في وضعه الافتراضي مش بيقدر يدخل على Gmail بتاعك، ولا قاعدة البيانات، ولا حتى ملف على جهازك. كل مرة عايزه يعمل حاجة في تطبيق خارجي، لازم تكتب integration كامل من الصفر: تجيب API key، تكتب HTTP requests، تتعامل مع الـ pagination والـ rate limits، وتكرّر العملية مع كل أداة جديدة. النتيجة العملية: المطور بيقضي حوالي 70% من وقت بناء الـ AI agent في الـ glue code، مش في المنطق اللي بيهمه فعلاً.
إيه هو MCP بمثال يفهمه أي حد
تخيل قبل اختراع USB-C كان عندك كابل مختلف لكل جهاز: واحد للموبايل القديم، تاني للكاميرا، تالت للبرنتر، رابع للهارد ديسك. كل جهاز بيتطلب كابل مخصوص، ولو نسيت كابل وانت طالع رحلة بقيت في ورطة. USB-C جه بمنطق مختلف تمامًا: منفذ واحد، شكل واحد، أي جهاز بيتفاهم معاه.
MCP (Model Context Protocol) هو USB-C للذكاء الاصطناعي. بدل ما تكتب كود تكامل مختلف لكل أداة (Gmail، Slack، Postgres، Notion، GitHub)، أي أداة بتتكلم MCP بتشتغل تلقائيًا مع أي AI client بيفهم MCP، من غير ما تعدّل سطر واحد في الـ AI نفسه.
التعريف الدقيق
MCP بروتوكول مفتوح أعلنت عنه Anthropic في نوفمبر 2024، ومبني على JSON-RPC 2.0. بيتكوّن من ثلاث مكونات أساسية:
- Host: التطبيق اللي بيستضيف Claude — زي Claude Desktop أو Cursor أو أي IDE بيدعم MCP.
- Client: الجزء اللي جوّه الـ Host المسؤول عن الاتصال مع server واحد.
- Server: عملية مستقلة بتعرض tools (دوال) و resources (ملفات/بيانات) و prompts (قوالب) عبر stdio أو HTTP+SSE.
الـ AI بيكتشف الأدوات المتاحة عبر استدعاء tools/list، وبينفّذ أي أداة عبر tools/call. كل حاجة موصّفة في المواصفة الرسمية على modelcontextprotocol.io.
مثال عملي: MCP server يقرأ ملفات مشروعك
هنبني server بسيط بيعرّض أداة واحدة اسمها read_project_file. بعد ما نوصّله بـ Claude Desktop، الـ AI هيقدر يستدعيها لمّا تقوله "اقرا الملف الفلاني".
# pip install mcp
from mcp.server.fastmcp import FastMCP
from pathlib import Path
mcp = FastMCP("project-reader")
PROJECT_ROOT = Path("/home/user/myproject").resolve()
@mcp.tool()
def read_project_file(relative_path: str) -> str:
"""قراءة ملف من داخل مجلد المشروع فقط."""
target = (PROJECT_ROOT / relative_path).resolve()
# حماية من path traversal
if not str(target).startswith(str(PROJECT_ROOT)):
return "خطأ: المسار خارج حدود المشروع"
if not target.exists():
return f"الملف {relative_path} غير موجود"
if target.stat().st_size > 200_000:
return "الملف أكبر من 200KB، اطلب جزء محدد"
return target.read_text(encoding="utf-8")
if __name__ == "__main__":
mcp.run(transport="stdio")