تشترك FastMCP وحزمة MCP Python SDK الرسمية الآن في طبقة البروتوكول، لكنهما لا تشتركان في API. تقارن هذه المقالة بينهما من حيث الاستيراد والمصادقة والتركيب والاختبار وحجم التثبيت وصعوبة الانتقال، لتختار الأنسب لخادم MCP القادم.
تلصق from mcp.server.fastmcp import FastMCP من درس تعليمي في مشروع جديد، وتشغّله، فتتلقى من Python رسالة ModuleNotFoundError. لا عيب في إعدادك. فقد أعادت SDK الرسمية تسمية تلك الفئة، واستمر مشروع FastMCP المستقل في التطور وحده، والآن تتشارك المكتبتان الاسم وطبقة البروتوكول وعددًا كبيرًا من المطورين المرتبكين.
إليك الجواب المختصر. حتى أكتوبر 2026، بلغت حزمة mcp الرسمية الإصدار 2.3.0، وحزمة fastmcp المستقلة الإصدار 4.0.11. اختر FastMCP عندما تريد تركيب الخوادم، والوكالة (proxying)، واستيراد OpenAPI، ومزودي المصادقة المدمجين، وعميل اختبار داخل العملية. واختر MCP SDK الرسمية عندما تريد أصغر شجرة اعتماديات، وتحكمًا مباشرًا في عناصر البروتوكول الأساسية، وعدم وجود إطار عمل إضافي بين كودك والمواصفة.
💡 الحكم السريع: إذا كنت تبني خادم Model Context Protocol سيستخدمه مستخدمون حقيقيون، وكنت غير متأكد، فابدأ مع FastMCP. أما في حالة الخادم البسيط، فالتحول لاحقًا إلى SDK الرسمية تعديل يستغرق خمس دقائق. أما العكس فيعني إعادة بناء ميزات منحتك إياها FastMCP مجانًا.
لماذا تشترك المكتبتان في اسم واحد
كيف انتهى الأمر بـFastMCP داخل SDK
بنى Jeremiah Lowin مشروع FastMCP بحيث تبدو كتابة خادم MCP كأنها كتابة دالة Python عادية. وكانت هذه API عالية المستوى جيدة بما يكفي لكي تستوعبها حزمة Anthropic الرسمية بلغة Python في عام 2024 بصفتها FastMCP 1.0، وتعيش في mcp.server.fastmcp. لم يتوقف المشروع المستقل أبدًا. فقد واصل إصدار تحديثاته تحت اسم حزمته الخاص، ووصل إلى الإصدار 3.0 GA في 18 فبراير 2026، وانتقل من حساب GitHub شخصي إلى مستودع PrefectHQ/fastmcp حين تبنّته Prefect كبنية تحتية أساسية.
يشرف عليه اليوم Jeremiah Lowin وNate Nowack بموجب ترخيص Apache-2.0. ويقول المشروع إنه يشغّل نحو 70% من خوادم MCP في جميع اللغات، وهو رقم مصدره المشروع نفسه، فخذه بحذر.
ما الذي تغيّر في SDK v2
جعلت SDK v2 الفصل رسميًا. أصبحت الفئة المدمجة FastMCP تُسمّى الآن MCPServer، وأُزيل مسار الاستيراد القديم بالكامل:
# SDK v1 (bundled FastMCP, gone in v2)
from mcp.server.fastmcp import FastMCP
# SDK v2
from mcp.server import MCPServer
# Standalone FastMCP
from fastmcp import FastMCP
إذا كنت ما زلت تحتاج السلوك القديم، فسلسلة الإصدار v1 تعمل في وضع الصيانة. ثبّتها باستخدام uv add "mcp[cli]<2".
أنت لا تختار بين تطبيقين متنافسين للبروتوكول. يعتمد FastMCP 4 على طبقة البروتوكول نفسها في SDK v2، لذا فالسؤال الحقيقي هو مقدار الإطار الذي تريد وضعه فوقها.
جنبًا إلى جنب: المقارنة السريعة
إليك كيف تقف المكتبتان أمام الأمور التي تحسم معظم المشاريع:
الميزة
MCP SDK الرسمية 2.3.0
FastMCP 4.0.11
التثبيت
uv add "mcp[cli]"
uv add fastmcp
فئة الخادم
MCPServer
FastMCP
الاستيراد
from mcp.server import MCPServer
from fastmcp import FastMCP
إصدار بايثون
3.10+
3.10+
وسائل النقل
stdio، وStreamable HTTP، وSSE
stdio، وHTTP، وSSE
أسلوب المزخرِفات
@mcp.tool() فقط
@mcp.tool أو @mcp.tool()
تركيب الخوادم
غير مدمج
تركيب خوادم داخل بعضها
وكالة الخوادم الأخرى
غير مدمجة
مدمجة
تحويل OpenAPI إلى أدوات
غير مدمج
OpenAPIProvider
إعداد المصادقة
ثلاثة إعدادات منفصلة
مزود واحد auth= (JWT وOAuth وGitHub وGoogle)
المراقبة
OpenTelemetry أصيل
خطافات middleware
الحجم المثبت
نحو 41 ميغابايت، 36 حزمة
نحو 65 ميغابايت، 66 حزمة
يشرف عليه
مشروع MCP
Prefect
تأتي أرقام حجم التثبيت من اختبار جنبًا إلى جنب نُشر في 5 أكتوبر 2026، لذا ستتغير أرقامك بحسب المنصة والإضافات.
خادم بسيط في المكتبتين
الكود في اليوم الأول متطابق تقريبًا. في المكتبتين تتحول تلميحات الأنواع إلى JSON Schema، وتصبح سلاسل التوثيق (docstrings) أوصافًا للأدوات. إليك نسخة SDK الرسمية:
from mcp.server import MCPServer
mcp = MCPServer("Demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
ونسخة FastMCP:
from fastmcp import FastMCP
mcp = FastMCP("Demo")
@mcp.tool
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
"""Greet someone by name."""
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run()
مع الإضافة cli في SDK يمكنك تجربة الأولى باستخدام mcp dev server.py. أما الثانية فتعمل مع python server.py عادي.
اختلافات صغيرة في الصياغة تُوقع في الخطأ
تأتي معظم أخطاء الانتقال من تفاصيل كهذه:
الأقواس: تتطلب MCPServer في SDK وجود @mcp.tool(). ويؤدي @mcp.tool المجرد إلى TypeError. أما FastMCP فيقبل الصيغتين.
اسم وسيلة النقل: تسميها SDK "streamable-http"، وتسميها FastMCP "http".
إعدادات وسيلة النقل: في SDK v2 انتقل المضيف والمنفذ من المُنشئ إلى استدعاء run().
خصائص السياق:ctx.mcp_server في SDK تصبح ctx.fastmcp في FastMCP، وتصبح ctx.log(level, data) هي ctx.log(message, level=...).
ما الذي تتفوق فيه SDK الرسمية
بصمة اعتماديات أخف
الحزمة الرسمية هي الأصغر حجمًا في التثبيت. في قياسات أكتوبر 2026، أدخلت mcp 2.3.0 36 حزمة وقرابة 41 ميغابايت إلى site-packages، بينما أدخلت fastmcp 4.0.11 66 حزمة وقرابة 65 ميغابايت. هذه الفجوة هي ثمن الإضافات: مزودو المصادقة، وأدوات OpenAPI، والوكالة، ومكتبة العميل.
ولماذا يهم ذلك عمليًا:
حزم أقل لتدقيقها حين يراجع فريق الأمن كل اعتمادية غير مباشرة.
صور حاويات أصغر للخوادم التي تعمل كنسخ صغيرة كثيرة.
سطح ترقية أقل حين تظهر ثغرة في كود لم يستخدمه خادمك أصلًا.
زمن الاستيراد البارد حجة أضعف، فقد تفاوتت القياسات نفسها بشدة بين التشغيلات على الجهاز الواحد، فلا تختر مكتبة بناءً على بضع مئات من الملّي ثانية في بدء التشغيل.
التحكم المباشر في البروتوكول
تحتفظ SDK الرسمية بفئة منخفضة المستوى Server إلى جانب الفئة الأسهل استخدامًا MCPServer. في الإصدار v2 يتبع كل معالج شكلًا واحدًا هو async (ctx, params) -> result، دون مزخرفات ودون تغليف تلقائي:
from mcp.server import Server, ServerRequestContext
from mcp.types import CallToolRequestParams, CallToolResult, TextContent
async def call_tool(ctx: ServerRequestContext, params: CallToolRequestParams) -> CallToolResult:
return CallToolResult(content=[TextContent(type="text", text="ok")])
server = Server("Bookshop", on_call_tool=call_tool)
أنت تكتب معالجة الطلبات بنفسك، أي كتابة أكثر وقوة أكبر. تضيف SDK v2 أيضًا أدوات على مستوى البروتوكول، وتصل إليها هنا بأوضح شكل:
Resolve وElicit: معامل أداة تملؤه دالة تكتبها أنت، ولا يراه النموذج، ويمكنه أن يتوقف ويطرح سؤالًا على المستخدم في منتصف الاستدعاء.
Client مدمج بالكامل: يتفاوض from mcp import Client على الاتصال نيابةً عنك، دون ClientSession متداخلة ودون تهيئة يدوية.
OpenTelemetry مدمج: يُتتبَّع كل طلب عبر middleware.
تخزين مؤقت للاستجابات:cache_hints على الخادم، ودعم للتخزين المؤقت في العميل.
دعم بروتوكولين: يمكن لنشر واحد أن يخدم عملاء بمراجعتي البروتوكول لعامي 2025 و2026.
تُلغي مراجعة البروتوكول 2026-07-28 مصافحة initialize ومعرّفات الجلسات في Streamable HTTP، فيستطيع موازن أحمال عادي توزيع الطلبات على نسخ عديمة الحالة. تقف المكتبتان على طبقة البروتوكول نفسها، لكن SDK هي المكان الذي تضبطه فيه مباشرة.
ما الذي تضيفه FastMCP فوق ذلك
عرض FastMCP بسيط: الأشياء التي ستضطر إلى كتابتها حول الخادم على أي حال، مكتوبة لك مسبقًا.
التركيب والوكالة
يستطيع FastMCP تركيب خادم داخل آخر، فيمكن أن يعيش خادم weather وخادم billing في وحدتين منفصلتين، ويظهران مع ذلك كنقطة نهاية واحدة بادئات مسارات. ويستطيع أيضًا توكيل خادم MCP تابع لطرف ثالث، ما يتيح لك لف خادم قائم بمصادقتك الخاصة. لا تملك SDK الرسمية أيًا من الأمرين كميزة مدمجة.
أعاد الإصدار 3.0 بناء هذه الفكرة حول المزودين. لم تعد الأدوات مضطرة للعيش في ملف واحد: إذ يجدها FileSystemProvider داخل مجلد ويعيد تحميلها عند تغييرها.
استيراد OpenAPI ومزودو المصادقة
إذا كانت شركتك تشغّل واجهة REST API بالفعل، فإن OpenAPIProvider يحوّل مواصفة OpenAPI أو تطبيق FastAPI إلى أدوات MCP دون أن تعيد كتابة كل نقطة نهاية يدويًا.
وتنال المصادقة المعاملة نفسها. يدمج FastMCP المعاملات الثلاثة المنفصلة في SDK (token_verifier، وauth_server_provider، وauth=AuthSettings) في مزود واحد auth=، مع دعم مدمج لأنواع JWT وOAuth وGitHub وGoogle. يصبح إضافة تسجيل الدخول عبر GitHub خيارًا في الإعدادات بدلًا من مشروع عطلة نهاية أسبوع. ويمكن للأدوات أيضًا أن تطلب المساعدة من نموذج LLM الخاص بالعميل عبر ctx.sample().
الاختبار دون شبكة
يقبل Client في FastMCP كائن الخادم مباشرة، فيعمل الاختبار داخل العملية دون منافذ، ودون عمليات فرعية، ودون مهلات زمنية غير مستقرة:
import asyncio
from fastmcp import Client, FastMCP
mcp = FastMCP("Demo")
@mcp.tool
def add(a: int, b: int) -> int:
return a + b
async def main():
async with Client(mcp) as client:
result = await client.call_tool("add", {"a": 2, "b": 3})
print(result.data) # 5
asyncio.run(main())
الاختبار داخل العملية من المزايا التي تذكرها ملاحظات الترحيل الخاصة بمشروع FastMCP نفسه، وهو ما يجعل بناء مجموعة اختبارات pytest سريعة أمرًا سهلًا.
أين يقصر كل منهما
لا يأتي أي من الخيارين مجانًا. ولكل منهما ثمن يظهر لاحقًا. الفرق التي تختار FastMCP تدفع من خلال تقلب الإصدارات وعدد أكبر من الاعتماديات، والفرق التي تختار SDK تدفع من خلال الكود الذي تكتبه بنفسها.
FastMCP يتحرك بسرعة
انتقل FastMCP من الإصدار 3.0 GA في فبراير 2026 إلى 4.0.11 بحلول أكتوبر، لذا توقع أن تصل الإصدارات الرئيسية بسرعة. ثبّت النطاق في ملف المشروع، مثلًا fastmcp>=4,<5، واقرأ ملاحظات الإصدار قبل كل ترقية.
كما يثبّت نحو 30 حزمة إضافية مقارنة بحزمة SDK. تبيع Prefect منصة مستضافة اسمها Horizon للنشر والتحكم في الوصول. والمكتبة نفسها مرخصة بموجب Apache-2.0 وتعمل في أي مكان يمكنك فيه تشغيل Python.
SDK v2 تكسر الكود القديم
إذا كنت تُرقّي خادم v1، فخصص وقتًا حقيقيًا. تسرد ملاحظات إصدار v2 التغييرات الكاسرة التالية:
أُزيل ناقل WebSocket (mcp[ws]).
أُزيلت Tasks API التجريبية ونُقلت إلى إضافة.
أصبح McpError الآن MCPError، وأي MCPError يُثار داخل أداة يتحول إلى خطأ في البروتوكول لا يراه النموذج أبدًا.
لم يعد معامل mount_path موجودًا.
تعمل المعالجات المتزامنة الآن على خيط عمل (worker thread) بدلًا من حلقة الأحداث.
في Streamable HTTP، يعمل دورة الحياة (lifespan) مرة واحدة عند بدء التشغيل، لا مرة لكل جلسة.
انتقل عميل HTTP من httpx إلى httpx2.
اختر الأنسب في دقائق
تخطَّ البحث في الميزات، وطابق وضعك بهذا الجدول:
وضعك
اختر
لف واجهة REST API قائمة أو تطبيق FastAPI
FastMCP
دمج عدة خوادم خلف نقطة نهاية واحدة
FastMCP
إضافة تسجيل دخول عبر GitHub أو Google أو OAuth
FastMCP
مراجعة صارمة للاعتماديات في بيئة مغلقة
MCP SDK الرسمية
سلوك بروتوكول مخصص على مستوى المعالج
MCP SDK الرسمية
نموذج أولي لعطلة نهاية أسبوع بأداة واحدة
أي منهما
تخيّل فريقًا من ثلاثة أشخاص يريد مساعدًا بالذكاء الاصطناعي يقرأ واجهة API الخاصة بالطلبات الداخلية. وبوجود مواصفة OpenAPI جاهزة، يزيل OpenAPIProvider معظم العمل المتعلق بكل نقطة نهاية على حدة، ويتولى مزود auth= الواحد تسجيل دخول الشركة. تخيّل الآن فريق منصة يبني بوابة خاضعة للتدقيق، ويجب أن تجتاز مراجعة صارمة للاعتماديات. ينتهي ذلك الفريق إلى SDK الرسمية ويحصل على المعالجات ذات المستوى الأدنى التي يحتاجها. لم يرتكب أي من الفريقين خطأ، لقد بدآ من قيود مختلفة.
اختر FastMCP عندما
تطلق شيئًا سيسجّل المستخدمون الدخول إليه.
تريد إعدادًا واحدًا من auth= بدلًا من ثلاثة.
تتوقع أن تنتقل من خادم واحد إلى عدة خوادم.
تفضّل مزخرف @mcp.tool الأقصر واختبارات داخل العملية السريعة.
اختر MCP SDK الرسمية عندما
تريد أقل عدد من الاعتماديات وأصغر صورة.
تحتاج إلى معالجة الطلبات والاستجابات الخام بنفسك.
يعتمد فريقك على التطبيق المرجعي من مشروع MCP.
تريد OpenTelemetry ودعم Resolve أو Elicit مباشرة من الحزمة الأساسية.
التبديل بينهما لاحقًا
تتشارك المكتبتان طبقة البروتوكول، لذا فالانتقال بينهما آلي في معظمه. والانتقال من SDK إلى FastMCP يبدو هكذا:
ثم غيّر "streamable-http" إلى "http" في استدعاء run()، وأعد تسمية ctx.mcp_server إلى ctx.fastmcp، ودمج إعدادات المصادقة الثلاثة في مزود واحد. أما في الاتجاه المعاكس، فاعكس هذه التعديلات، وخطّط لاستبدال التركيب والوكالة واستيراد OpenAPI بكودك الخاص.
شغّل اختباراتك بعد كل خطوة. إذا كتبتها باستخدام عميل داخل العملية، فالفحص كله يستغرق ثوانٍ.
ابنِ خادمك الخاص مع Picasso IA
لا يكون خادم MCP مفيدًا إلا بقدر ما يقف خلف أدواته. تقدم Picasso IA موصل MCP وواجهة API للمطورين لتوليد الصور وتعديلها وتوليد الفيديو، فيستطيع عميل مثل Claude Desktop إنشاء مرئيات عبر أدوات لم تضطر أنت إلى بنائها. هذه المهام غير متزامنة: ترسل مهمة ثم تستعلم عن النتيجة. ونمط الإرسال ثم الاستعلام هذا مفيد أيضًا لخوادمك الخاصة، بأداة واحدة تعيد معرّف المهمة وأداة ثانية تتحقق من حالتها.
صمّم خادمك على PicassoIA
يمكنك أن تجعل نموذج LLM يكتب المسودة الأولى لأي من الإصدارين. إليك الطريق السريع مع Claude Sonnet 5، وهو نموذج مصمم لمهام البرمجة:
املأ حقل الأمر النصي (Prompt) المطلوب، مثلًا: "اكتب خادم MCP بلغة Python باستخدام FastMCP، يضم أداتين: إحداهما تجمع الأرقام والأخرى تجلب ملخص الطقس، مع ملف pytest يستخدم العميل داخل العملية."
اضبط الجهد (effort): أبقه على low للتعديلات السريعة، أو ارفعه لخطأ صعب يمتد عبر عدة ملفات.
أبقِ الحد الأقصى للتوكنات (max tokens) على القيمة الافتراضية 8,192 لملف خادم كامل، واستخدم الأمر النصي للنظام (system prompt) لتثبيت أسلوب البرمجة مرة واحدة.
أرفق صورة إن كانت لديك، مثل لقطة شاشة لخطأ، ثم ولّد الكود والصقه في مشروعك.
اطلب النسختين في طلب واحد وقارن الفرق بنفسك. وإن أردت رأيًا ثانيًا في الكود، فإن GPT 5.6 Sol مصمم لمهام البرمجة المعقدة، ويصلح مراجعًا جيدًا.
عندما يعمل خادمك، امنحه شيئًا ممتعًا ليقوم به. افتح Picasso IA، وجرّب نماذج الصور والفيديو، وشاهد ما تنتجه بضع أوامر نصية جيدة الصياغة. ثم اربط أداتك المفضلة بخادم MCP الخاص بك، ودع مشروعك القادم ينشئ مرئياته بنفسه. صورتك الأولى لا تبعد عنك إلا بأمر نصي واحد.