Skip to content

بوابة MCP

استخدم أي خادم MCP. نحن نؤمّن الحدود.

Model Context Protocol (MCP) هو المعيار الناشئ لاتصال الوكيل بالأدوات. يوفر Triggerfish بوابة MCP آمنة تتيح لك الاتصال بأي خادم متوافق مع MCP مع تطبيق ضوابط التصنيف وأذونات مستوى الأداة وتتبع التلوث وتسجيل التدقيق الكامل.

أنت تجلب خوادم MCP. Triggerfish يؤمّن كل طلب ورد يعبر الحدود.

كيف تعمل

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

تدفق بوابة MCP: الوكيل ← بوابة MCP ← طبقة السياسة ← خادم MCP، مع مسار رفض إلى BLOCKED

توفر البوابة خمس وظائف أساسية:

  1. مصادقة وتصنيف الخادم -- يجب مراجعة وتصنيف خوادم MCP قبل الاستخدام
  2. تطبيق أذونات مستوى الأداة -- يمكن السماح أو تقييد أو حظر أدوات فردية
  3. تتبع تلوث الطلب/الرد -- تلوث الجلسة يتصاعد بناءً على تصنيف الخادم
  4. التحقق من المخطط -- جميع الطلبات والردود تُتحقق مقابل المخططات المُعلنة
  5. تسجيل التدقيق -- كل استدعاء أداة وقرار وتغيير تلوث يُسجّل

حالات خادم MCP

جميع خوادم MCP تبدأ كـ UNTRUSTED. يجب تصنيفها صراحةً قبل أن يتمكن الوكيل من استدعائها.

الحالةالوصفهل يمكن للوكيل الاستدعاء؟
UNTRUSTEDالافتراضي للخوادم الجديدة. في انتظار المراجعة.لا
CLASSIFIEDتمت المراجعة وتعيين مستوى تصنيف مع أذونات لكل أداة.نعم (ضمن السياسة)
BLOCKEDمحظور صراحةً من قبل المسؤول.لا
آلة حالة خادم MCP: UNTRUSTED ← CLASSIFIED أو BLOCKED

أمان لا يمكن استدعاء خادم MCP بحالة UNTRUSTED من قبل الوكيل

تحت أي ظرف. لا يمكن لـ LLM طلب أو إقناع أو خداع النظام لاستخدام خادم غير مصنّف. التصنيف بوابة على مستوى الكود، وليس قرار LLM. :::

التكوين

تُكوّن خوادم MCP في triggerfish.yaml كخريطة مفهرسة بمعرّف الخادم. كل خادم يستخدم إما عملية فرعية محلية (نقل stdio) أو نقطة نهاية بعيدة (نقل SSE).

الخوادم المحلية (Stdio)

تُطلق الخوادم المحلية كعمليات فرعية. يتواصل Triggerfish معها عبر stdin/stdout.

yaml
mcp_servers:
  github:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "keychain:github-pat"
    classification: CONFIDENTIAL

  filesystem:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/you/docs"]
    classification: INTERNAL

  weather:
    command: npx
    args: ["-y", "@mcp/server-weather"]
    classification: PUBLIC

الخوادم البعيدة (SSE)

الخوادم البعيدة تعمل في مكان آخر ويتم الوصول إليها عبر HTTP Server-Sent Events.

yaml
mcp_servers:
  remote_api:
    url: "https://mcp.example.com/sse"
    classification: CONFIDENTIAL

مفاتيح التكوين

المفتاحالنوعمطلوبالوصف
commandstringنعم (stdio)الملف التنفيذي (مثل npx، deno، node)
argsstring[]لاالوسائط الممررة للأمر
envmapلامتغيرات البيئة للعملية الفرعية
urlstringنعم (SSE)نقطة نهاية HTTP للخوادم البعيدة
classificationstringنعممستوى حساسية البيانات: PUBLIC، INTERNAL، CONFIDENTIAL، أو RESTRICTED
enabledbooleanلاالافتراضي: true. عيّن إلى false للتخطي بدون إزالة التكوين.

كل خادم يجب أن يحتوي على command (محلي) أو url (بعيد). الخوادم التي لا تحتوي على أي منهما يتم تخطيها.

الاتصال الكسول

تتصل خوادم MCP في الخلفية بعد بدء التشغيل. لا تحتاج الانتظار حتى تكون جميع الخوادم جاهزة قبل استخدام وكيلك.

  • تعيد الخوادم المحاولة بتراجع أسي: 2 ثانية ← 4 ثوانٍ ← 8 ثوانٍ ← 30 ثانية كحد أقصى
  • الخوادم الجديدة تصبح متاحة للوكيل عند اتصالها -- لا حاجة لإعادة تشغيل الجلسة
  • إذا فشل الخادم في الاتصال بعد جميع المحاولات، يدخل حالة failed ويمكن إعادة المحاولة عند إعادة تشغيل الخادم التالية

تعرض واجهات CLI وTidepool حالة اتصال MCP في الوقت الفعلي. انظر قناة CLI للتفاصيل.

تعطيل خادم

لتعطيل خادم MCP مؤقتاً بدون إزالة تكوينه:

yaml
mcp_servers:
  github:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
    classification: CONFIDENTIAL
    enabled: false # يُتخطى أثناء بدء التشغيل

متغيرات البيئة والأسرار

قيم env المسبوقة بـ keychain: تُحل من سلسلة مفاتيح نظام التشغيل عند بدء التشغيل:

yaml
env:
  API_KEY: "keychain:my-secret-name" # تُحل من سلسلة مفاتيح نظام التشغيل
  PLAIN_VAR: "literal-value" # تُمرر كما هي

فقط PATH يُورث من بيئة المضيف (حتى تُحل npx وnode وdeno وغيرها بشكل صحيح). لا تتسرب متغيرات بيئة مضيف أخرى إلى عمليات خادم MCP الفرعية.

خزّن الأسرار بـ triggerfish config set-secret <name> <value>. ثم

أشر إليها كـ keychain:<name> في تكوين env لخادم MCP. :::

تسمية الأدوات

أدوات خوادم MCP تُسمى بمساحة أسماء كـ mcp_<serverId>_<toolName> لتجنب التعارض مع الأدوات المدمجة. مثلاً، إذا كشف خادم باسم github أداة تُسمى list_repos، يراها الوكيل كـ mcp_github_list_repos.

التصنيف والرفض الافتراضي

إذا حذفت classification، يُسجّل الخادم كـ UNTRUSTED وتُرفض جميع استدعاءات الأدوات من البوابة. يجب اختيار مستوى تصنيف صراحةً. انظر دليل التصنيف للمساعدة في اختيار المستوى المناسب.

تدفق استدعاء الأداة

عندما يطلب الوكيل استدعاء أداة MCP، تنفذ البوابة تسلسل فحوصات حتمية قبل تحويل الطلب.

1. فحوصات ما قبل التنفيذ

جميع الفحوصات حتمية -- لا استدعاءات LLM، لا عشوائية.

الفحصنتيجة الفشل
حالة الخادم CLASSIFIED؟حظر: "الخادم غير معتمد"
الأداة مسموح بها لهذا الخادم؟حظر: "الأداة غير مسموحة"
المستخدم لديه الأذونات المطلوبة؟حظر: "الإذن مرفوض"
تلوث الجلسة متوافق مع تصنيف الخادم؟حظر: "سينتهك عدم الكتابة لأسفل"
التحقق من المخطط نجح؟حظر: "معلمات غير صالحة"

إذا كان تلوث الجلسة أعلى من تصنيف الخادم، يُحظر الاستدعاء

لمنع الكتابة لأسفل. جلسة ملوثة بمستوى CONFIDENTIAL لا يمكنها إرسال بيانات إلى خادم MCP بمستوى PUBLIC. :::

2. التنفيذ

إذا نجحت جميع فحوصات ما قبل التنفيذ، تُحوّل البوابة الطلب إلى خادم MCP.

3. معالجة الرد

عندما يُعيد خادم MCP رداً:

  • التحقق من الرد مقابل المخطط المُعلن
  • تصنيف بيانات الرد بمستوى تصنيف الخادم
  • تحديث تلوث الجلسة: taint = max(current_taint, server_classification)
  • إنشاء سجل نسب يتتبع أصل البيانات

4. التدقيق

كل استدعاء أداة يُسجّل مع: هوية الخادم، اسم الأداة، هوية المستخدم، قرار السياسة، تغيير التلوث، والطابع الزمني.

قواعد تلوث الرد

ردود خادم MCP ترث مستوى تصنيف الخادم. تلوث الجلسة يمكن أن يتصاعد فقط.

تصنيف الخادمتلوث الردالتأثير على الجلسة
PUBLICPUBLICلا تغيير في التلوث
INTERNALINTERNALالتلوث يتصاعد إلى INTERNAL على الأقل
CONFIDENTIALCONFIDENTIALالتلوث يتصاعد إلى CONFIDENTIAL على الأقل
RESTRICTEDRESTRICTEDالتلوث يتصاعد إلى RESTRICTED

بمجرد تلوث الجلسة بمستوى معين، تبقى عند ذلك المستوى أو أعلى لبقية الجلسة. إعادة ضبط كاملة للجلسة (التي تمسح سجل المحادثة) مطلوبة لتقليل التلوث.

تمرير مصادقة المستخدم

لخوادم MCP التي تدعم المصادقة على مستوى المستخدم، تُمرر البوابة بيانات اعتماد المستخدم المُفوّضة بدلاً من بيانات اعتماد النظام.

عندما تُكوّن أداة بـ requires_user_auth: true:

  1. تتحقق البوابة مما إذا كان المستخدم قد وصل هذا الخادم MCP
  2. تسترجع بيانات اعتماد المستخدم المُفوّضة من مخزن بيانات الاعتماد الآمن
  3. تضيف مصادقة المستخدم إلى رؤوس طلب MCP
  4. يطبق خادم MCP أذونات مستوى المستخدم

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

تمرير مصادقة المستخدم هو النمط المفضل لأي خادم MCP يدير

التحكم في الوصول. يعني أن الوكيل يرث أذونات المستخدم بدلاً من وصول نظام شامل. :::

التحقق من المخطط

تتحقق البوابة من جميع طلبات وردود MCP مقابل المخططات المُعلنة قبل التحويل:

typescript
// التحقق من الطلب (مبسط)
function validateMcpRequest(
  serverConfig: McpServerConfig,
  toolName: string,
  params: Record<string, unknown>,
): Result<void, McpError> {
  const toolSchema = serverConfig.getToolSchema(toolName);

  if (!toolSchema) {
    return err(new McpError("Unknown tool"));
  }

  // التحقق من المعلمات مقابل مخطط JSON
  if (!validateJsonSchema(params, toolSchema.inputSchema)) {
    return err(new McpError("Invalid parameters"));
  }

  // التحقق من أنماط الحقن في معلمات النصوص
  for (const [, value] of Object.entries(params)) {
    if (typeof value === "string" && containsInjectionPattern(value)) {
      return err(new McpError("Potential injection detected"));
    }
  }

  return ok(undefined);
}

التحقق من المخطط يلتقط الطلبات المشوهة قبل وصولها إلى الخادم الخارجي ويُعلّم أنماط الحقن المحتملة في معلمات النصوص.

ضوابط المؤسسات

نشر المؤسسات لديه ضوابط إضافية لإدارة خادم MCP:

  • سجل خوادم يُديره المسؤول -- فقط خوادم MCP المعتمدة من المسؤول يمكن تصنيفها
  • أذونات أدوات لكل قسم -- فرق مختلفة يمكنها الحصول على وصول أدوات مختلف
  • تسجيل الامتثال -- جميع تفاعلات MCP متاحة في لوحات الامتثال
  • تحديد المعدل -- حدود معدل لكل خادم ولكل أداة
  • مراقبة صحة الخادم -- تتتبع البوابة توفر الخادم وأوقات الاستجابة