دليل خادم MCP: الإعداد والأمثلة وأول أداة للمبتدئين
دليل مبتدئين ينقلك من مجلد فارغ إلى خادم MCP يعمل. اضبط Python، واكتب أول أداة لك في 15 سطرًا، واختبرها في Inspector، واربطها بعميل حقيقي، وتعرّف كيف يندمج توليد الصور والفيديو عبر البروتوكول نفسه.
دليل مبتدئين ينقلك من مجلد فارغ إلى خادم MCP يعمل. اضبط Python، واكتب أول أداة لك في 15 سطرًا، واختبرها في Inspector، واربطها بعميل حقيقي، وتعرّف كيف يندمج توليد الصور والفيديو عبر البروتوكول نفسه.
يستطيع مساعدك بالذكاء الاصطناعي أن يكتب قصيدة سونيتة عن جداول البيانات، لكن إن سألته عن حجم ملف على حاسوبك المحمول، فسيكتفي بهزّ كتفيه. يسدّ بروتوكول سياق النموذج (Model Context Protocol) هذه الفجوة. خادم MCP برنامج صغير يمنح المساعد قدرات حقيقية: قراءة مجلد، والاستعلام من قاعدة بيانات، واستدعاء API، وحتى توليد صورة. يبني هذا الدليل خادمًا من مجلد فارغ، وينتهي بأول أداة تعمل خلال نحو عشرين دقيقة، ولا يتطلب أي خبرة سابقة في البروتوكولات.
ستثبّت SDK، وتكتب أداة، وتختبرها في Inspector، وتربطها بعميل حقيقي، ثم ترى كيف يعمل النمط نفسه على توليد الصور والفيديو في PicassoIA. كل شيء يعمل بلغة Python بسيطة، فإذا كنت تستطيع قراءة دالة، فستتابع الدليل دون صعوبة.
قبل USB-C، كان لكل جهاز كابل خاص به. يفعل MCP للذكاء الاصطناعي ما فعله ذلك المنفذ الواحد للأجهزة. بدونه، يحتاج كل مساعد إلى شيفرة مخصصة لكل خدمة، أي ما يعادل عدد المساعدين × عدد الخدمات من الروابط البرمجية. أما معه، فتكتب خادمًا واحدًا ويستطيع أي عميل متوافق مع MCP استخدامه.
قدّمت Anthropic البروتوكول في أواخر 2024، ومنذ ذلك الحين تبنّته تطبيقات محادثة كثيرة، ومحررات أكواد، وأطر عمل للوكلاء. هذا التبنّي هو السبب الحقيقي للاهتمام به: الأداة التي تبنيها اليوم لا تقتصر على منتج واحد، والمهارات التي تكتسبها تنتقل إلى كل عميل يفهم البروتوكول.

تظهر ثلاثة أدوار في كل محادثة MCP، وكثيرًا ما يخلط المبتدئون بينها.
| الدور | ماذا يكون | من يكتبه |
|---|---|---|
| المضيف (Host) | التطبيق الذي تتحدث معه، مثل تطبيق محادثة سطح المكتب أو محرر الأكواد | مزوّد التطبيق |
| العميل (Client) | موصّل داخل المضيف، واحد لكل خادم | يتولاه المضيف نيابةً عنك |
| الخادم (Server) | برنامج يعرض الأدوات والبيانات والأوامر النصية | أنت |
تنتقل الرسائل بصيغة JSON-RPC 2.0. يتحدث الخادم المحلي عبر stdio: يشغّل المضيف سكربتك كعملية فرعية، ويتبادل الرسائل عبر مدخلاتها ومخرجاتها. أما الخادم البعيد فيتحدث عبر Streamable HTTP، وهذه هي الطريقة التي تعمل بها الموصلات المستضافة.
إليك ما يحدث عندما تطرح سؤالًا:

يستطيع الخادم أن يقدّم ثلاثة أنواع من الأشياء، ولكل منها جهة مختلفة تتحكم فيه.
| العنصر | من يُفعّله | الاستخدام الأنسب | مثال |
|---|---|---|---|
| الأدوات (Tools) | النموذج يقرر | الإجراءات والحسابات | عدّ الكلمات، إرسال بريد إلكتروني |
| الموارد (Resources) | التطبيق يقرر | بيانات للقراءة فقط | ملف ملاحظات، صف في قاعدة بيانات |
| الأوامر النصية (Prompts) | المستخدم يختار | قوالب قابلة لإعادة الاستخدام | طلب مراجعة كود |
💡 ابدأ بالأدوات أولًا. فهي أكثر العناصر دعمًا، وأداة واحدة تعمل تعلّمك معظم ما يطلبه البروتوكول منك.
جهّز أربعة أشياء قبل كتابة أي شيفرة:
python --version.npx.تعمل الخطوات على Windows و macOS و Linux جميعًا. الأمر الوحيد الذي يتغير هو أمر تفعيل البيئة الافتراضية، والشيفرة أدناه متطابقة على كل الأنظمة.

توجد حزم SDK رسمية لعدة لغات. اثنتان منها الخيار الأكثر أمانًا لأول خادم:
| SDK | التثبيت | اخترها عندما |
|---|---|---|
Python (mcp) | pip install "mcp[cli]" | تريد أقصر طريق. تصبح تلميحات الأنواع مخطط الأداة تلقائيًا |
TypeScript (@modelcontextprotocol/sdk) | npm install @modelcontextprotocol/sdk zod | يعيش مشروعك أصلًا في Node، أو تخطط للنشر على بيئة ويب |
يستخدم هذا الدليل لغة Python. المفاهيم، من الأدوات إلى وسائل النقل، تنتقل إلى كل حزمة SDK أخرى دون تغيير.
أنشئ مجلدًا، وأضف بيئة معزولة، ثم ثبّت SDK:
mkdir word-counter
cd word-counter
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install "mcp[cli]"
تثبّت الإضافة [cli] الأمر mcp، الذي يتضمن مشغّلًا تطويريًا للاختبارات السريعة.

أنشئ server.py بهذا المحتوى:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("word-counter")
@mcp.tool()
def count_words(text: str) -> dict:
"""Count the words, characters and lines in a piece of text."""
return {
"words": len(text.split()),
"characters": len(text),
"lines": len(text.splitlines()),
}
if __name__ == "__main__":
mcp.run(transport="stdio")
ثلاثة تفاصيل تقوم بكل العمل:
text: str) تصبح مخطط JSON الذي يخبر العميل بالمعاملات الموجودة ونوع كل منها.عندما يتصل عميل، يطلب من خادمك قائمة الأدوات. يردّ FastMCP باسم count_words، ويجعل النص التوثيقي وصفها، ومخطط إدخال مولّدًا من التوقيع: كائن فيه خاصية نصية واحدة مطلوبة اسمها text. هذا المستند الصغير بصيغة JSON هو كل ما يعرفه النموذج عن دالتك، ولهذا تهم التسمية والصياغة أكثر من الشيفرة الذكية.
💡 إذا لم تُستدعَ أداة أبدًا، فالسبب في الغالب نص توثيقي غامض، وليس خطأ في شيفرتك.
لا تربط تطبيق محادثة بعد. صحّح الأخطاء في MCP Inspector، وهو منصة اختبار تعمل في المتصفح:
npx @modelcontextprotocol/inspector python server.py
تفتح صفحة محلية. ثم:
count_words.text، ثم شغّلها.
⚠️ لا تستخدم
print()أبدًا في خادم stdio. المخرجات القياسية هي قناة الرسائل، وأي طباعة عشوائية تُفسد الرسائل. أرسل السجلات إلى stderr، أو استخدم وحدةloggingفي Python.
بعد أن يُظهر Inspector علامة النجاح، سجّل الخادم لدى عميل. بالنسبة إلى Claude Desktop، أضف هذا إلى ملف claude_desktop_config.json:
{
"mcpServers": {
"word-counter": {
"command": "/absolute/path/to/.venv/bin/python",
"args": ["/absolute/path/to/server.py"]
}
}
}
بالنسبة إلى Claude Code، يؤدي أمر واحد المهمة نفسها:
claude mcp add word-counter -- /absolute/path/to/.venv/bin/python /absolute/path/to/server.py
أعد تشغيل التطبيق بالكامل، ثم اسأل: "كم عدد الكلمات في هذه الفقرة؟" متبوعًا بنص ما. سيطلب العميل الإذن، ويشغّل count_words، ويجيب بالأرقام الدقيقة بدلًا من التخمين.

إذا لم يظهر شيء، فتحقق من هذه النقاط بالترتيب:
python المجرد يجد غالبًا نسخة أخرى دون SDK.عندما لا يكفي السكربت المحلي، بدّل وسيلة النقل باستخدام mcp.run(transport="streamable-http")، واستضفه خلف HTTPS وأضف المصادقة. تبقى شيفرة الأداة كما هي تمامًا، وهذه هي الفائدة الخفية للبناء على بروتوكول.
تعرض الموارد البيانات عبر URI. يقدّم هذا المثال ملف ملاحظات:
from pathlib import Path
@mcp.resource("notes://today")
def todays_notes() -> str:
"""Return the contents of today's notes file."""
return Path("notes/today.md").read_text(encoding="utf-8")
يستطيع التطبيق إرفاقه كسياق دون أن يستدعي النموذج أي شيء. ويمكن للموارد أيضًا استخدام قوالب URI مثل notes://{date}، فتخدم دالة واحدة عائلة كاملة من الملفات.
الأمر النصي نقطة بداية قابلة لإعادة الاستخدام يختارها المستخدم من قائمة. وعلى عكس الأداة، لا يقرر النموذج تشغيله أبدًا: المستخدم هو من يختاره، ويصبح الناتج الرسالة الافتتاحية للمحادثة.
@mcp.prompt()
def review_code(code: str) -> str:
"""Ask for a short, friendly code review."""
return f"Review this code and list the three most important fixes:\n\n{code}"
معظم الخوادم الحقيقية تغلّف خدمة ويب. يتحقق هذا المثال مما إذا كان موقع ما يعمل:
import httpx
@mcp.tool()
async def check_site(url: str) -> str:
"""Return the HTTP status code of a website."""
async with httpx.AsyncClient(timeout=10) as client:
response = await client.get(url, follow_redirects=True)
return f"{url} answered with status {response.status_code}"
يأتي httpx مع SDK أصلًا، وتصريح الدالة بأنها async يتيح للخادم أن يبقى مستجيبًا أثناء انتظار الشبكة. استدعاءات الشبكة تفشل، لذلك التقط الاستثناء وأعد رسالة قصيرة واضحة. النموذج الذي يرى "انتهت مهلة الموقع بعد 10 ثوانٍ" يستطيع أن يتكيّف ويجرب شيئًا آخر، بينما يربكه تتبع خطأ خام.

| الخطأ | ماذا يحدث | الحل |
|---|---|---|
| الطباعة إلى stdout | يعرض العميل خطأ تحليل | سجّل إلى stderr |
| نص توثيقي غامض | يتجاهل النموذج أداتك | اذكر ما تفعله ومتى تُستخدم |
| مسارات ملفات نسبية | "الملف غير موجود" داخل العميل فقط | ابنِ المسارات من __file__ أو استخدم المسارات المطلقة |
| إرجاع حمولات ضخمة | إجابات بطيئة وسياق مهدر | أرجع ملخصًا مختصرًا |
| أدوات كثيرة دفعة واحدة | يختار النموذج الأداة الخطأ | ابدأ بثلاث إلى خمس أدوات مركّزة |
تساعد التسمية بقدر ما يساعد الجدول أعلاه. اختر أفعالًا تصف ما يحدث، مثل count_words أو check_site، واجعل كل أداة لها مهمة واحدة، واقصر المعاملات على القليل الذي يحتاجه النموذج فعلًا. أداة اسمها process بستة حقول اختيارية تدعو إلى التخمين الخاطئ.
الأداة شيفرة يستطيع النموذج تشغيلها على جهازك، فتعامل معها باحترام:
env في إعداد العميل، فيبقيها بعيدة عن مستودعك.
الخوادم ليست مقتصرة على السكربتات المحلية. يتيح PicassoIA توليد الصور والفيديو لعملاء MCP، بحيث يمكن للمساعد إنشاء الوسائط مباشرة من المحادثة. ويشترك الموصل مع API للمطورين في النماذج الأربعة نفسها:
| النموذج | المهمة |
|---|---|
| PicassoIA Image | تحويل النص إلى صورة |
| PicassoIA Image Editor Pro | تعديل صورة موجودة |
| PicassoIA Video | تحويل النص أو الصورة إلى فيديو |
| Seedance 2.5 Lite | فيديو مع صوت |
من الداخل، يتبع API نمطًا مألوفًا: ينشئ تنبؤًا، ثم يستعلم عن حالته بشكل متكرر، ثم يجلب النتيجة. تستخدم الطلبات رمز Bearer، ويمكن أن يصل طول الأمر النصي إلى 4,000 حرف، ويتيح الحساب تشغيل حتى 5 تنبؤات في الوقت نفسه، مشتركة بين الرموز واتصالات MCP. أدر الاتصالات من صفحة MCP في حسابك على PicassoIA، وتحقق من خطتك لمعرفة ما يتضمنه الوصول إلى MCP.
لست مضطرًا إلى كتابة كل أداة بيدك. تحوّل النماذج اللغوية الكبيرة (LLM) جملة عادية إلى مسودة أولى تستطيع اختبارها في Inspector:
| النموذج | الأفضل في |
|---|---|
| Claude Sonnet 5 | الشيفرة الدقيقة وإعادة الهيكلة |
| GPT 5.6 Terra | مسودات جاهزة للإنتاج |
| Kimi K2.6 | سير عمل الأدوات بأسلوب الوكلاء |
| Gemini 3.5 Flash | التكرارات السريعة |
صف الأداة في جملة واحدة، واطلب نسخة FastMCP، ثم شغّلها في Inspector قبل أن تثق بها. تكتب النماذج شيفرة تبدو صحيحة، و Inspector هو ما يكشف الأجزاء التي تبدو معقولة لكنها خاطئة.
بعد الاتصال يصبح سير العمل قصيرًا:
تعامل مع كل أمر نصي كقائمة تحقق قصيرة: الشخص والفعل، والمكان، واتجاه الضوء، والعدسة وملمس السطح. اجعل فكرة واحدة لكل صورة، ووَلّد على دفعات صغيرة حتى تبقى ضمن حد الخمسة في وقت واحد بينما لا تزال النتائج الأولى قيد التصيير.

💡 التوليد غير متزامن. إذا أبلغ العميل عن حالة "pending"، فهذا يعني أنه يستعلم عن الحالة، وليس أن هناك فشلًا.
لديك الآن القطع كلها: خادم، وأول أداة، واختبار في Inspector، واتصال بالعميل. أضف أداة ثانية هذا الأسبوع، وحوّل أحد سكربتاتك الخاصة إلى خادم، وشاهد كيف يصبح مساعدك مفيدًا بسرعة.
ثم وظّف الجانب الإبداعي. توجّه إلى Picasso IA، واختر نموذجًا مثل PicassoIA Image، وولّد أول صورة لك من جملة واحدة. جرّب الإضاءة والعدسات والمزاج، وأرسل أفضل نتيجة إلى Seedance 2.5 Lite لتحريكها، وشاهد إلى أي مدى يمكن أن يذهب أمر نصي جيد واحد.
اختر لغتك