MCP server Python: بناء خادم للطلبات من الصفر إلى النشر

أنشئ خادم MCP للاستعلام عن الطلبات بلغة Python، واختبره في Inspector، ثم اربطه بـClaude Code وCursor وأضف مصادقة HTTP واختر الاستضافة المناسبة لفريقك.

نُشر في

بقلم
MCP server Python: بناء خادم للطلبات من الصفر إلى النشر

بإنشاء خادم MCP بلغة Python (MCP server Python)، يمكنك إتاحة بيانات شركتك لـClaude Code أو Cursor للإجابة عن حالة طلب، دون نسخ سجله إلى المحادثة. ابدأ بأداة MCP واحدة للقراءة فقط، وتحقق من عملها في Inspector، ثم اختر تشغيلها محليًا أو تقديمها عبر خدمة HTTP محمية بالمصادقة يستطيع فريقك مشاركتها.

أفضل خادم تبدأ به يؤدي مهمة محددة: يستقبل معرّف الطلب ويعيد حالته. ابدأ بهذا النطاق. أما أداة الوصول العامة إلى قاعدة البيانات، فتُلقي على النموذج قرارات أكثر من اللازم وتمنحه صلاحيات تتجاوز حاجة هذا العمل.

يتبع هذا الدليل الشرح الرسمي الحالي لبناء الخوادم. حتى 7 أكتوبر 2026، تعتمد الوثائق مواصفة MCP 2026-07-28 وحزمة تطوير Python الرسمية، وهي المكتبة المسؤولة عن رسائل MCP، مع واجهة MCPServer. ويثبّت المثال الإصدار 2.3.0 من حزمة التطوير، حتى لا تؤدي تعليمات الاستيراد في دليل أقدم إلى تغيير ما تثبّته دون أن تنتبه.

ما الذي يتيحه خادم MCP للتطبيق؟

يمكن تصور خادم MCP كمكتب خدمة مضبوط الصلاحيات، يتوسط بين تطبيق الذكاء الاصطناعي وأنظمتك. يستطيع التطبيق الاستفسار عما هو متاح، وإرسال طلب، وتلقي النتيجة. أما ما يسمح به مكتب الخدمة، فيحدده الكود الذي تكتبه.

يوفر MCP، اختصارًا لـModel Context Protocol، صيغة مشتركة لهذا التواصل. المضيف هو التطبيق الذي تستخدمه، مثل Claude Code أو Cursor. ويتولى العميل التابع له التواصل مع خادمك وفق البروتوكول. هذه أدوار في النظام، وليست ثلاثة تطبيقات إضافية عليك تثبيتها.

الإمكانيةمعناها ببساطةمثال في التعامل مع الطلبات
الأدواتدوال يستطيع العميل استدعاءها بوسائط محددةتعيد lookup_order(order_id) حالة الطلب
المواردسياق قابل للقراءة يحدده URI، أي عنوان لتلك المعلوماتمستند سياسة الإرجاع الذي يستطيع العميل قراءته
قوالب التعليماتقوالب رسائل قابلة لإعادة الاستخدام، يستطيع المضيف عرضها للمستخدمقالب لصياغة رد عن شحنة متأخرة

يمكن أن تكون الأداة مخصصة للقراءة فقط. وتسمية شيء «موردًا» لا تُغني عن التحقق من صلاحيات الوصول. كما أن قالب التعليمات يوجّه العمل ولا يمنح إذنًا بتنفيذه. ويختلف دعم العملاء لهذه الإمكانيات وطريقة عرضها، لذا تحقق من الميزات التي تتيحها فعليًا. هذه هي اللبنات الثلاث التي يقدمها الخادم، ويحتاج الخادم أدناه إلى أداة فقط.

مكتب خدمة MCP بتصميم معماري، يضم أقسامًا منفصلة للأدوات والموارد وقوالب التعليمات متصلة بعميل
يستطيع الخادم إتاحة ثلاثة أنواع من الإمكانيات. يتيح هذا التنفيذ الأول أداة الاستعلام عن الطلبات فقط.

قبل أن تبدأ البناء، تحقق من وجود موصل يحظى بصيانة مستمرة ويغطي حاجتك. يمكنك البدء بدليلنا إلى أفضل خوادم MCP لعام 2026. يستحق الخادم المخصص الجهد عندما تختلف بياناتك الداخلية أو قواعد الصلاحيات أو طريقة العمل عما تدعمه تلك الموصلات.

إنشاء أداة للقراءة فقط باستخدام MCP server Python

دع حزمة التطوير الرسمية تتولى البروتوكول، وركّز كودك على الاستعلام. تحتاج إلى Python 3.10 أو أحدث، وإلى uv، مدير مشاريع Python المستخدم في الدليل الرسمي، وإلى Node.js لتشغيل Inspector. يتطلب الإصدار الحالي من Inspector استخدام Node 22.19.0 أو أحدث.

نفّذ الأوامر التالية بالترتيب في الطرفية:

  1. uv init orders-mcp
  2. cd orders-mcp
  3. uv venv
  4. uv add "mcp[cli]==2.3.0"

أنشئ ملف orders.py داخل هذا المجلد، ثم ألصق فيه كود الخادم كاملًا. السجلات بيانات تدريب وهمية، ولا تتضمن أسماء عملاء أو بيانات دفع أو بيانات اعتماد لواجهات API.

Python
import json

from mcp.server import MCPServer

mcp = MCPServer("orders")

# Fictional training data. No customer records or credentials.
ORDERS = {
    "A100": {"status": "shipped", "carrier": "Demo Courier"},
    "A101": {"status": "packing", "carrier": "not assigned"},
}


@mcp.tool()
def lookup_order(order_id: str) -> str:
    """Look up a fictional order by ID, such as A100. Read-only.

    Args:
        order_id: Exact order ID, for example A100 or A101.
    """
    key = order_id.strip().upper()
    order = ORDERS.get(key)
    if order is None:
        return json.dumps({"found": False, "order_id": key})
    return json.dumps({"found": True, "order_id": key, **order})


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

يستخدم المثال النمط الموثق في الدليل: MCPServer و@mcp.tool() وmcp.run(transport="stdio")، مع استبدال أدوات الطقس بأداة للاستعلام عن الطلبات. يوضح تلميح النوع النصي للحزمة أن order_id قيمة نصية مطلوبة. ويشرح نص توثيق الدالة للعميل متى تكون الأداة مفيدة. تتولى الحزمة إنشاء تعريف الأداة ومعالجة رسائل البروتوكول.

شغّل uv run orders.py. من الطبيعي أن تبقى العملية صامتة في انتظار الإدخال. stdio، أي الإدخال والإخراج القياسيان، هي قناة التواصل التي يستخدمها العميل للحديث مع هذه العملية. أوقف هذا التشغيل اليدوي قبل أن تتيح للعميل إطلاق نسخته الخاصة.

لا ترسل سجلات التطبيق إلى الإخراج القياسي. استخدم وحدة logging في Python، التي تكتب افتراضيًا إلى قناة الخطأ القياسي. قد يؤدي استدعاء عابر لـprint() إلى إفساد تدفق البروتوكول. هذا قيد موثق في stdio، وليس مجرد تفضيل لشكل السجلات.

عندما تستبدل القاموس بقاعدة بيانات، أبقِ واجهة الأداة محدودة كما هي. استخدم استعلامًا ذا معاملات، وحساب قاعدة بيانات لا يقرأ إلا الحقول المطلوبة، وتحقق من صلاحيات المستدعي قبل إعادة أي سجل. لا تقبل من النموذج عبارة SQL عشوائية لتنفيذ هذه المهمة.

كيف تختبر الخادم باستخدام MCP Inspector؟

تحقق من عمل الأداة قبل أن تطلب من النموذج استخدامها. من مجلد المشروع، شغّل uv run mcp dev orders.py. يطلق أمر التطوير في حزمة SDK تطبيق MCP Inspector. افتح عنوان المتصفح الذي يطبعه الأمر، ثم اتصل بالخادم إن لم يكن متصلًا بالفعل.

في قسم Tools، اختر lookup_order. يفترض أن يظهر في النموذج حقل order_id بوصفه حقلًا مطلوبًا. استدعِ الأداة بالقيمة A100: ينبغي أن تتضمن النتيجة found: true وstatus: shipped وcarrier: Demo Courier. استخدم A101 للحصول على packing. ثم جرّب DOES-NOT-EXIST: ينبغي أن تتضمن النتيجة found: false.

جرّب أيضًا إرسال طلب دون order_id. ينبغي أن يفشل التحقق من المدخلات قبل تنفيذ الاستعلام. تساعدك واجهتا Protocol وConsole في Inspector على التمييز بين طلب غير صحيح وتعطل عملية الخادم.

لإجراء فحص قابل للتكرار من الطرفية، استخدم npx @modelcontextprotocol/inspector --cli uv run orders.py --method tools/list. ولاستدعاء الأداة، استخدم npx @modelcontextprotocol/inspector --cli uv run orders.py --method tools/call --tool-name lookup_order --tool-arg order_id=A100. يستند الأمران إلى واجهة Inspector الموثقة لسطر الأوامر.

معيار النجاح واضح: أداة واحدة يمكن اكتشافها، وحالة متوقعة لطلب معروف، واستجابة صريحة عندما لا يوجد السجل. فقرة مقنعة يولدها النموذج لا تثبت أن الاستعلام نُفّذ.

ربط الخادم نفسه بـClaude Code وCursor

يطلق كل عميل محلي عملية خادم مستقلة. لا تحتاج إلى إبقاء Inspector قيد التشغيل. استخدم مسارات مطلقة حتى لا يعتمد إطلاق الخادم على المجلد الذي يفتحه العميل.

Claude Code: شغّل claude mcp add --transport stdio --scope local orders -- /ABSOLUTE/PATH/orders-mcp/.venv/bin/python /ABSOLUTE/PATH/orders-mcp/orders.py. في Windows، يكون مسار المفسّر .venv\Scripts\python.exe. يتبع هذا الأمر صيغة إعداد الخادم المحلي في Claude Code، بما فيها الفاصل -- الذي يسبق أمر التشغيل.

شغّل claude mcp get orders للتحقق من الاتصال. داخل جلسة Claude Code، افتح /mcp، ثم اطلب: «استخدم lookup_order للتحقق من A100. أعد فقط الحالة وشركة الشحن الواردتين في النتيجة». راجع استدعاء الأداة والوسائط التي أُرسلت إليها.

Cursor: أنشئ .cursor/mcp.json داخل مشروعك. أضف JSON التالي مع استبدال المسارين المطلقين: {"mcpServers":{"orders":{"type":"stdio","command":"/ABSOLUTE/PATH/orders-mcp/.venv/bin/python","args":["/ABSOLUTE/PATH/orders-mcp/orders.py"]}}}.

افتح Customize، وفعّل الخادم، ثم اطرح السؤال نفسه في Agent. راجع الاستدعاء وفق إعدادات الموافقة لديك. يتبع موضع الملف وحقول التشغيل وعناصر التحكم إعداد MCP في Cursor. إذا فشل الاتصال، افحص مسار الملف التنفيذي ومخرجات الخطأ القياسي للخادم قبل تغيير الأداة.

متى تختار stdio محليًا أو HTTP عن بُعد؟

استخدم التشغيل المحلي للعمل الفردي. واختر HTTP عن بُعد عندما يحتاج عدة أشخاص أو عملاء مستضافون إلى خدمة واحدة تديرها مركزيًا.

وجه المقارنةstdio محليStreamable HTTP عن بُعد
مكان التشغيلعملية يطلقها العميل على جهازهخدمة ويب عند نقطة وصول عبر HTTPS
طريقة عثور العميل عليهأمر تشغيل ووسائطعنوان مثل https://orders.example.com/mcp
حدود الوصولصلاحيات نظام التشغيل وبيئة العملية وبيانات اعتماد الأنظمة التي تتصل بهاهوية مستدعٍ موثقة ونطاقات صلاحيات وتحقق من الإذن لكل سجل
التحديثاتتحديث كل نسخة مثبتةنشر خدمة واحدة
أفضل استخدام أوليمطور واحد يتحقق من مهمة محددة النطاقوصول مشترك مع إدارة مركزية

تحتاج الخدمة البعيدة أيضًا إلى اتصال شبكي ببيانات شركتك. نشر نقطة وصول لا يجعل قاعدة بيانات خاصة متاحة عبر الشبكة، ولا يضمن صحة صلاحياتها.

يستخدم بروتوكول HTTP في مواصفة 2026-07-28 طلبات مكتفية بذاتها. وتستطيع حزمة Python الحالية خدمة عملاء أقدم أيضًا؛ قد تحتاج جلساتهم إلى توجيه ثابت نحو النسخة نفسها عند إضافة نسخ أخرى من الخادم. استخدم الإعدادات الموثقة لدعم العملاء الأقدم عن قصد قبل التوسع، ولا تفترض أن كل عميل متصل يدعم أحدث مراجعة للمواصفة.

مساران بتصميم معماري يقارنان عملية stdio محلية على جهاز واحد بالوصول عبر HTTP عن بُعد من خلال بوابة مصادقة
اختر حدود النشر: عملية محلية لمهمة فردية، أو خدمة HTTP مشتركة محمية بالمصادقة.

نقل أداة الاستعلام إلى HTTP مع المصادقة

احمِ الوصول عبر HTTP برموز وصول صادرة لهذه الخدمة. OAuth 2.1 هو إطار التفويض المعتمد في مواصفة MCP: يتولى موفر الهوية تسجيل دخول المستخدم وإصدار رمز وصول، بينما يتحقق خادم MCP من صحته. نطاق الصلاحية إذن له اسم، مثل orders:read. أما الجمهور المستهدف فيحدد الخدمة التي يجوز لها قبول الرمز.

تقدم الحزمة تكامل خادم الموارد، أما نظام تسجيل الدخول الخاص بشركتك فعليك توفيره. لهذا المثال، اضبط موفر هوية يدعم اكتشاف إعدادات OAuth، وتسجيل العملاء الذين اخترتهم، واستخدام PKCE لتسجيل دخول المستخدم، ونقطة وصول لفحص رموز الوصول. يثبت PKCE أن التطبيق الذي يُكمل تسجيل الدخول هو نفسه الذي بدأه. ويسأل فحص الرمز جهة الإصدار عما إذا كان الرمز نشطًا وما الصلاحيات التي يمنحها.

يفترض هذا المهايئ إجراء فحص الرمز عبر HTTPS، مع مصادقة العميل بطريقة HTTP Basic، واستجابة تتضمن active وaud وexp وclient_id وscope. اضبط جهة الإصدار بحيث تضع العنوان العام الدقيق لنقطة الوصول هذه في aud، وتمنح orders:read. إذا كان موفر الهوية يستخدم طريقة مختلفة لمصادقة طلب فحص الرمز، عدّل الطلب وفق وثائقه. وإذا كان يقدم JWTs، أي رموزًا موقعة، فنفّذ بدلًا من ذلك التحقق من التوقيع وجهة الإصدار ووقت الانتهاء والجمهور المستهدف عبر واجهة TokenVerifier نفسها.

أضف uvicorn بالأمر uv add uvicorn، ثم أنشئ remote.py بجوار orders.py. يتبع هذا الكود المثال الرسمي لفحص الرموز في حزمة SDK، وواجهاتها الموثقة لـHTTP والمصادقة. ويعيد استخدام أداة الاستعلام التي اختبرتها للتو.

Python
import os
import time
from urllib.parse import urlsplit

import httpx2
from pydantic import AnyHttpUrl

from mcp.server import MCPServer
from mcp.server.auth.provider import AccessToken, TokenVerifier
from mcp.server.auth.settings import AuthSettings
from mcp.server.transport_security import TransportSecuritySettings
from orders import lookup_order as local_lookup

RESOURCE = os.environ["MCP_RESOURCE_URL"]
ISSUER = os.environ["MCP_ISSUER_URL"]
INTROSPECT = os.environ["MCP_INTROSPECTION_URL"]
if any(urlsplit(url).scheme != "https" for url in (RESOURCE, ISSUER, INTROSPECT)):
    raise ValueError("Public auth and resource URLs must use HTTPS")


class OrderTokenVerifier(TokenVerifier):
    async def verify_token(self, token: str) -> AccessToken | None:
        try:
            async with httpx2.AsyncClient(timeout=5.0) as client:
                response = await client.post(
                    INTROSPECT,
                    data={"token": token},
                    auth=(os.environ["MCP_INTROSPECTION_CLIENT_ID"],
                          os.environ["MCP_INTROSPECTION_CLIENT_SECRET"]),
                )
                response.raise_for_status()
                data = response.json()
            audiences = data.get("aud", [])
            if isinstance(audiences, str):
                audiences = [audiences]
            expiry = data.get("exp")
            if (data.get("active") is not True or RESOURCE not in audiences
                    or not isinstance(expiry, int) or expiry <= time.time()):
                return None
            if data.get("iss", ISSUER) != ISSUER:
                return None
            return AccessToken(
                token=token, client_id=data["client_id"],
                scopes=data.get("scope", "").split(), expires_at=expiry,
                resource=RESOURCE, subject=data.get("sub"),
            )
        except Exception:
            return None


mcp = MCPServer(
    "orders",
    token_verifier=OrderTokenVerifier(),
    auth=AuthSettings(
        issuer_url=AnyHttpUrl(ISSUER),
        resource_server_url=AnyHttpUrl(RESOURCE),
        required_scopes=["orders:read"], validate_token_resource=True,
    ),
)


@mcp.tool()
def lookup_order(order_id: str) -> str:
    """Look up a fictional order by ID, such as A100. Read-only."""
    return local_lookup(order_id)


hostname = urlsplit(RESOURCE).hostname
security = TransportSecuritySettings(
    allowed_hosts=[hostname, f"{hostname}:*"],
    allowed_origins=[os.environ["MCP_ALLOWED_ORIGIN"]],
)
app = mcp.streamable_http_app(transport_security=security)

اضبط القيم التالية في بيئة النشر أو مخزن الأسرار:

المتغيرالقيمة المطلوبة
MCP_RESOURCE_URLالعنوان العام الدقيق لنقطة الوصول، مثل https://orders.example.com/mcp
MCP_ISSUER_URLعنوان جهة الإصدار لدى موفر الهوية، مطابقًا لما يرد في بياناته الوصفية
MCP_INTROSPECTION_URLنقطة الوصول الموثقة لفحص رموز الوصول عبر HTTPS
MCP_INTROSPECTION_CLIENT_IDمعرّف العميل السري المخوّل بفحص رموز الوصول
MCP_INTROSPECTION_CLIENT_SECRETسر ذلك العميل
MCP_ALLOWED_ORIGINأصل متصفح مسموح به بدقة، مثل أصل تطبيقك الداخلي

تُحدد قائمة أسماء المضيفين المسموح بها صراحةً لأن الحزمة، في إعدادها الافتراضي، تقبل localhost وترفض اسم المضيف العام بخطأ 421 Misdirected Request. أما أصول المتصفح فتخضع لفحص مستقل؛ أدرج فقط الأصول التي تستخدمها فعليًا. ويتضمن التطبيق المُعاد دورة بدء التشغيل والإيقاف بالفعل. تتبع هذه التفاصيل وثائق نشر حزمة SDK وتطبيق ASGI. وASGI هي الواجهة التي تستخدمها خوادم الويب في Python لتشغيل هذا التطبيق.

شغّله خلف وكيل HTTPS لدى مزود الاستضافة باستخدام uv run uvicorn remote:app --host 0.0.0.0 --port 8000. يظل عنوان المورد العام عبر HTTPS حتى لو تواصل الوكيل مع العملية عبر HTTP. واضبط الثقة في الترويسات المُمررة وفق الحدود الفعلية للوكيل في تلك الاستضافة.

قبل استخدام سجلات حقيقية، نفّذ الفحوص التالية عبر HTTP:

  • دون رمز وصول، أو برمز منتهي الصلاحية، أو برمز موجه إلى جمهور آخر: يُرفض الوصول.
  • برمز صالح لا يتضمن orders:read: يُرفض الوصول.
  • برمز صالح له الجمهور المستهدف ونطاق الصلاحية الصحيحان: تعيد lookup_order حالة الطلب التجريبي.
  • عند /.well-known/oauth-protected-resource/mcp: تحدد البيانات الوصفية المورد وجهة الإصدار الصحيحين.

استخدم npx @modelcontextprotocol/inspector --server-url https://orders.example.com/mcp --transport http لفحص نقطة الوصول المنشورة وإكمال مسار المصادقة. اختبار الأداة داخل الذاكرة يتجاوز التفويض عبر HTTP، لذلك لا يثبت أن حدود الوصول هذه تعمل.

في Claude Code، أضف اتصالًا مستقلًا بالأمر claude mcp add --transport http orders-remote https://orders.example.com/mcp، ثم أكمل المصادقة عبر /mcp. وفي Cursor، أضف إدخالًا بعيدًا تحت mcpServers يتضمن "url":"https://orders.example.com/mcp"، ثم أكمل OAuth. توثق Cursor أيضًا كائن auth الذي يتضمن CLIENT_ID وscopes للعملاء المسجلين مسبقًا. سجّل عناوين رد الاتصال المناسبة للعملاء لدى جهة الإصدار. راجع المصادقة في Claude Code وإعداد OAuth للخوادم البعيدة في Cursor.

هذا مهايئ صغير مزود بالمصادقة، وتبقى منظومة الإنتاج بحاجة إلى عمل إضافي. قبل استبدال القاموس التجريبي، طبّق صلاحيات كل جهة وسجل استنادًا إلى هوية موثقة، وأضف حدث تدقيق لكل استدعاء، وأعد استخدام اتصالات HTTP، وضع حدودًا للطلبات. يتيح نطاق الصلاحية تنفيذ العملية، لكنه لا يثبت ملكية المستخدم لكل طلب.

استضافة الخادم على Render أو Cloudflare Workers

بالنسبة إلى خادم Python أعلاه، سأبدأ بـRender. تتيح خدمة ويب بلغة Python الاحتفاظ بالتطبيق الذي بنيته. وتُعد Cloudflare Workers خيارًا قويًا إذا أردت تنفيذ الأداة المحددة نفسها باستخدام معالج Worker الموثق لديها.

هذه أسعار منشورة لدى مزودي الخدمة، جرى التحقق منها في 7 أكتوبر 2026:

الاستضافةالسعر الابتدائي المعلنما يشمله السعرمدى ملاءمتها لهذا الدليل
Cloudflare Workers Freeدون رسوم للخطة100,000 طلب/يوم، و10 مللي ثانية من وقت CPU لكل استدعاءنموذج أولي باستخدام Worker ضمن هذه الحدود
Cloudflare Workers Paidحد أدنى $5 شهريًاتشمل 10 ملايين طلب/شهر و30 مليون مللي ثانية من وقت CPU/شهرنشر Worker مشترك؛ تبلغ تكلفة الطلبات الإضافية $0.30 لكل مليون، ووقت CPU الإضافي $0.02 لكل مليون مللي ثانية
خدمة الويب المدفوعة من Render$7 شهريًا لموارد الحوسبة 0.5c-512mbذاكرة RAM بسعة 512 MB؛ رسوم مساحة العمل Hobby هي $0، وتُضاف إليها تكلفة الحوسبةتشغيل تطبيق Python ASGI هذا

المصادر: أسعار Cloudflare Workers وأسعار Render. إذا اخترت ميزات الفريق، تضيف مساحة العمل Pro من Render رسومًا قدرها $25 شهريًا إلى تكلفة الحوسبة. خصص ميزانية مستقلة للتخزين وخدمات الهوية واستخدام النماذج وغيرها من الإضافات؛ هذه أسعار الاستضافة وحدها، وليست تكلفة سير عمل يعتمد على الذكاء الاصطناعي.

النشر على Render: ضع orders.py وremote.py وrequirements.txt في مستودعك. يحتاج ملف المتطلبات إلى mcp[cli]==2.3.0 وuvicorn، كل منهما في سطر مستقل. أنشئ خدمة Python Web Service، واستخدم أمر البناء pip install -r requirements.txt، وأمر التشغيل uvicorn remote:app --host 0.0.0.0 --port $PORT. أضف متغيرات البيئة المذكورة أعلاه، ثم استخدم اسم المضيف المخصص لك أو نطاقك الخاص في MCP_RESOURCE_URL. يكيّف هذا الإعداد طريقة Render الموثقة لنشر خدمة ويب بلغة Python لتشغيل تطبيق ASGI الذي تقدمه الحزمة.

تصلح خدمة Render المجانية للعرض التجريبي، لكنها تدخل وضع السكون بعد 15 دقيقة من الخمول، وتستغرق نحو دقيقة للعودة. سأختار موارد حوسبة مدفوعة لأداة تفاعلية مشتركة.

النشر على Cloudflare: استخدم الوثائق الحالية لمعالج MCP ودليل الخادم البعيد. يستخدم المسار الحالي في TypeScript الدالة createMcpHandler من agents/mcp/server مع @modelcontextprotocol/server. نفّذ أداة الاستعلام عن الطلبات نفسها هناك، واضبط المصادقة قبل مشاركة العنوان. أمر تشغيل uvicorn بلغة Python مخصص لاستضافة Python؛ نشر Worker له إعداداته الخاصة.

حصر حدود الأمان في حاجة الأداة

امنح الخادم الوصول الذي تتطلبه أداته فقط. للاستعلام عن حالة الطلب، يعني ذلك بيانات اعتماد للقراءة فقط في النظام الخلفي، وحقولًا محددة، والتحقق من الصلاحية لكل سجل. خصص أدوات وصلاحيات مستقلة لرد المبالغ وإلغاء الطلبات وتغيير العناوين. اختيار النموذج للوسائط لا يمنحه إذنًا بالوصول.

تحقق في رموز HTTP من جهة الإصدار ووقت الانتهاء والجمهور المستهدف ونطاق الصلاحية. استخدم HTTPS وبيانات اعتماد مستقلة عندما يستدعي الخادم واجهة API أخرى. تحظر إرشادات أمان MCP تمرير رموز الوصول كما هي: فالرمز المقدم إلى نقطة وصول MCP لا يصلح تلقائيًا كبيانات اعتماد لنظام الطلبات لديك. وفي stdio المحلي، قيّد العملية التي تطلق الخادم وبيئتها ووصولها إلى نظام الملفات.

سجّل هوية المستدعي الموثقة، واسم الأداة، ومرجعًا للسجل حُجبت منه المعلومات الحساسة بالقدر المناسب، والنتيجة، وزمن الاستجابة، ومعرّف الطلب. تجنب تسجيل الرموز والسجلات الكاملة للعملاء. أرسل السجلات إلى قناة الخطأ القياسي مع stdio، وإلى نظام سجلات الاستضافة مع HTTP. تعامل مع النص المسترجع من السجلات كبيانات؛ لا يجوز أن تمنح ملاحظة داخل طلب صلاحية لتنفيذ إجراء آخر.

ضع بوابة أمام الخوادم عندما تحتاج عدة خوادم أو فرق إلى سياسة مشتركة للهوية، أو حدود لمعدلات الطلبات، أو جمع أحداث التدقيق، أو إلغاء الوصول. تستطيع البوابة توحيد هذه الضوابط، مع بقاء كل نظام خلفي مسؤولًا عن صحة صلاحيات السجلات. يشرح دليلنا إلى بوابات MCP هذا القرار.

مسار أمان بتصميم معماري يبدأ بهوية موثقة، ويمر بفحص الرمز، وينتهي باستعلام عن طلب للقراءة فقط وسجل تدقيق
تسمح الهوية ونطاق الصلاحية بمرور الطلب. وتحدد صلاحيات السجل ما يظهر في النتيجة. ويتيح حدث التدقيق مراجعة الاستدعاء.

ستة استخدامات عملية مرتبة بحسب العائد المباشر

هذه توسعات محتملة للنمط نفسه. ابدأ بمهمة يسترجع فيها شخص معلومة محددة مرارًا، ويستطيع تمييز الإجابة الصحيحة.

الترتيبالمستخدم المحتملالمهمة المحددةالفائدة المحتملة
1فريق دعم يجيب عن أسئلة الشحنجلب حالة الطلب وشركة الشحن المسموح بالاطلاع عليهما، ثم صياغة رد في المساعد الذي يستخدمه الفريق بالفعلتقليل التنقل بين صندوق الرسائل ونظام الطلبات
2مسؤول تقني يتعامل مع أعطال تؤثر في العملاءجلب الميزات المفعلة للحساب وأحداث الخدمة الأخيرة باستخدام معرّف الحسابتقليل الوقت اللازم لجمع سياق المشكلة قبل التحقيق
3مدير حساب يستعد لتجديد الاشتراكاسترجاع خطة عميل يُسمح للمستخدم بالاطلاع على بياناته، وتاريخ التجديد، والمشكلات المفتوحةتقليل الاعتماد على معلومات قديمة في التحضير للاجتماع
4مسؤول مالي يتابع استفسارات الفواتيرالاستعلام عن حالة فاتورة مسموح بالاطلاع عليها ومرجع الطلب المرتبط بهاتسريع المطابقة دون منح صلاحية الدفع
5مهندس يصحح أخطاء تكامل داخلياسترجاع نتيجة مهمة مع حجب البيانات الحساسة، وحقول التشخيص المعتمدة، باستخدام معرّف المهمةتقليل البحث اليدوي في السجلات ومشاركة بيانات الاعتماد
6موظف يجيب عن سؤال يتعلق بالسياساتقراءة مورد سياسة يملك إذنًا بالوصول إليه، مع مصدره وتاريخ تحديثهإسناد الإجابات إلى السياسة الفعلية بدلًا من صياغة يتذكرها الموظف

ابدأ حساب الجدوى من طريقة عملك أنت. مثال توضيحي فقط: 80 استعلامًا يوميًا، يستغرق كل منها 2 دقيقة، تستهلك 160 دقيقة. إذا أظهر القياس لاحقًا أن العمل بعد الربط يوفر 1 دقيقة لكل استعلام، فهذا يعني استعادة 80 دقيقة يوميًا. هذه عملية حسابية وليست معيارًا لقياس الأداء. قِس صحة الإجابات والوقت الذي توفره قبل أن تنسب عائدًا إلى الإنفاق على الاستضافة.

فرصتان تستحقان البناء

أقوى فرصة هي بناء مهايئ يزوّد فرق الدعم بسياق الطلبات. قد يشتري فريق تكاملًا محدودًا يجلب معلومات الشحن الصحيحة داخل المساعد الذي يستخدمه بالفعل. تقدر DataForSEO حجم البحث عن «customer support automation» في Google بالولايات المتحدة بـ260 بحثًا شهريًا، وفق فحص بتاريخ 7 أكتوبر 2026. يشير هذا إلى اهتمام عام بالمهمة، ولا يمثل عدد المشترين المحتملين لخوادم MCP. تعلن Intercom سعر Fin عند $0.99 لكل نتيجة، ما يدل على وجود ميزانية بالفعل لأتمتة الدعم؛ يضيف هذا المهايئ الصغير السياق بدلًا من استبدال ذلك المنتج.

يمكن أن تشمل أصغر نسخة قابلة للبيع نظام طلبات خلفيًا واحدًا، وlookup_order، وتسجيل دخول بنطاقات صلاحيات، ومسار تدقيق، ومسودة رد تستشهد بالحقول المُعادة. تكمن ميزتها في ملاءمتها لبيانات شركة بعينها وقواعد الوصول لديها. لكن قد يكون لدى المزودين الحاليين موصل يؤدي هذه المهمة بالفعل، كما تبقى تراخيص النماذج للفريق وتنظيف البيانات والدعم تكاليف قائمة. تحقق من هذه الفجوة مع مسؤول دعم قبل إضافة أدوات أخرى.

الفرصة الثانية هي الاستعلام عن السياسات مع مراعاة الصلاحيات. يستطيع مسؤول تشغيل إتاحة مجموعة السياسات المعتمدة لدى شركة واحدة عبر الموارد أو أداة بحث محدودة. تقدر DataForSEO حجم البحث عن «enterprise search» في الولايات المتحدة بـ390 بحثًا شهريًا، وفق فحص في التاريخ نفسه. يمكن أن تتضمن النسخة الأولية القابلة للاستخدام مجموعة واحدة، وإسناد المعلومات إلى مصادرها، وفحوصًا لحداثة المحتوى، وتصفية النتائج بحسب صلاحيات الشخص المسجل دخوله. التحدي أن جودة الاسترجاع وضبط الوصول هما جوهر المنتج؛ من السهل تقليد إتاحة مجلد عبر MCP. ويمثل حجم البحث إشارة إلى الطلب على المهمة الأوسع، وليس دليلًا على استعداد المستخدمين للدفع مقابل هذا التنفيذ.

ما الذي يظل مسؤوليتك بعد بناء الخادم؟

يوحّد MCP طريقة الوصول. وتبقى جودة البيانات والتفويض وموثوقية النظام الخلفي وتحديد ما تستطيع الأداة فعله مسؤوليتك. قد يسيء النموذج فهم نتيجة صحيحة، وقد تختلف الإمكانيات المدعومة أو سياسات الموافقة لدى العميل المتصل.

ابنِ هذا الخادم عندما تحسن واجهة أدوات مشتركة سير عمل تستطيع قياسه. أما مهمة دفعية ثابتة لا تحتاج إلى مساعد يختار أداة، فقد يكون استدعاء API عادي أو سكربت تنفيذًا أنسب لها.

خطوتك ليوم الاثنين: اختر استعلامًا متكررًا واحدًا مع أحد موظفي الدعم، واستخدم سجلات وهمية لربط كلا العميلين، ثم استبدل مجموعة البيانات خلف حساب للقراءة فقط واختبر صلاحيات السجلات. أبقِ عمليات الكتابة خارج هذا الإطلاق الأول. انقل الأداة إلى HTTP مشترك عندما يصبح سير العمل وحدود الهوية جاهزين.

هل إنشاء خادم MCP صعب؟

إنشاء خادم صغير للقراءة فقط مباشر مع حزمة التطوير الرسمية: عرّف الدالة، وصف مدخلاتها، واختر وسيلة النقل. أما إتاحة بيانات الشركة بأمان فتحتاج إلى عمل إضافي لفرض الصلاحيات وإدارة بيانات الاعتماد وتشغيل الخدمة.

هل يمكنني استخدام خادم MCP مجاني للاختبار؟

يمكن تشغيل خادم الطلبات الوهمي في هذا الدليل محليًا دون رسوم استضافة. ويتيح MCP Inspector استدعاءه دون اشتراك في نموذج. أما الاستضافة السحابية وعميل الذكاء الاصطناعي الذي تختاره لاحقًا، فلكل منهما تسعيره.

كم تبلغ تكلفة خادم MCP؟

لا تحتاج العملية المحلية إلى خطة استضافة مستقلة. تعلن Cloudflare Workers فئة مجانية وحدًا أدنى قدره $5 شهريًا للخطة المدفوعة. وتعلن Render موارد حوسبة بسعر $7 شهريًا لخدمة الويب المدفوعة الصغيرة. لا تشمل هذه الأرقام استخدام النماذج أو خدمات الهوية أو التخزين أو العمل الهندسي.

هل أحتاج إلى تثبيت خادم MCP؟

مع stdio، يعمل الخادم على جهاز العميل، لذلك يجب أن يتوفر الكود وبيئة تشغيله هناك. ومع HTTP عن بُعد، تضبط نقطة الوصول وتُجري المصادقة، بينما يعمل الخادم لدى الاستضافة. اختر طريقة نشر يدعمها العميل الذي تستخدمه.

إذا أردت بناء خدمة MCP تتصل ببيانات شركتك وتشغيلها لفريقك، فإن خدمتنا لأنظمة الذكاء الاصطناعي في الإنتاج تشمل التكامل وضوابط الوصول إليه.

تاريخ النشر
التصنيف
Build
مقالات ذات صلة
Gumloop vs n8n: أيهما أنسب لأتمتة أعمالك؟

Gumloop vs n8n: أيهما أنسب لأتمتة أعمالك؟

مقارنة Gumloop و n8n: الأسعار، والأرصدة مقابل عمليات التنفيذ، والاستضافة الذاتية. تعرّف على تكلفة أتمتة العملاء المحتملين والمنصة الأنسب لمن يديرها.7 أكتوبر 2026Build
LangGraph أم غيره؟ مقارنة 8 أطر لبناء وكلاء الذكاء الاصطناعي في 2026

LangGraph أم غيره؟ مقارنة 8 أطر لبناء وكلاء الذكاء الاصطناعي في 2026

قارن LangGraph وCrewAI وأطر بناء وكلاء الذكاء الاصطناعي وفق حفظ الحالة والموافقات ودعم MCP وتكاليف الاستضافة، واختر ما يناسب تطبيقك في بيئة الإنتاج.7 أكتوبر 2026Build
Codex Cloud: جهّز بيئتك مرة واحدة وتابع البرمجة من هاتفك

Codex Cloud: جهّز بيئتك مرة واحدة وتابع البرمجة من هاتفك

جهّز بيئة Codex Cloud قابلة لإعادة الاستخدام، ودع مهام البرمجة تستمر وحاسوبك مطفأ. تعرّف على الخطط والتكلفة، وتابع العمل من هاتفك واختر بين السحابة وCLI المحلي.7 أكتوبر 2026Build
اشتراك GitHub Copilot في 2026: كيف تحسب الفاتورة وتختار الخطة

اشتراك GitHub Copilot في 2026: كيف تحسب الفاتورة وتختار الخطة

اشتراك GitHub Copilot من Free إلى Enterprise: قارن الأسعار وأرصدة AI Credits، واحسب فاتورتك بالمحادثات والوكلاء، واختر الخطة واضبط حدود الإنفاق.6 أكتوبر 2026Build
Copilot CLI: من تثبيت GitHub Copilot إلى أول طلب دمج

Copilot CLI: من تثبيت GitHub Copilot إلى أول طلب دمج

تعرّف إلى إعداد GitHub Copilot CLI وتسجيل الدخول وإصلاح الاختبارات وفتح طلب دمج، مع شرح الخطط وأرصدة الذكاء الاصطناعي والصلاحيات والنماذج وأدوات MCP.6 أكتوبر 2026Build
أدوات استخراج البيانات من المواقع: كيف تختار web scraping tools في 2026؟

أدوات استخراج البيانات من المواقع: كيف تختار web scraping tools في 2026؟

قارن 8 أدوات لاستخراج بيانات المواقع، من Firecrawl إلى Bright Data، واختر حسب المخرجات والجدولة ومسؤولية التشغيل، مع أسعار واضحة وحساب تكلفة العمل المتكرر.6 أكتوبر 2026Build
ذاكرة وكلاء الذكاء الاصطناعي: ماذا تحفظ وكيف تحسب تكلفتها؟

ذاكرة وكلاء الذكاء الاصطناعي: ماذا تحفظ وكيف تحسب تكلفتها؟

دليل عملي لذاكرة وكلاء الذكاء الاصطناعي: الفرق بين السياق وحالة الجلسة والتخزين الدائم، وتكاليف التشغيل، ومعالجة المعلومات القديمة وتسرب بيانات المستخدمين.5 أكتوبر 2026Build
Pinecone pricing: ما الذي يرفع فاتورتك وكيف تحسبها؟

Pinecone pricing: ما الذي يرفع فاتورتك وكيف تحسبها؟

افهم أسعار Pinecone وحدود Starter وBuilder والحد الأدنى للخطط المدفوعة، واحسب تكلفة تخزين مليون إلى 100 مليون متجه والبحث فيها وفق حجم البيانات والاستعلامات.5 أكتوبر 2026Build
النشرة البريدية

رسالة واحدة، كل يوم أحد.أنظمة تعمل، لا آراء ساخنة.

أسبوعية. بلا إزعاج. يمكنك إلغاء الاشتراك متى شئت.