Model Context Protocol (MCP)

إتقان خوادم MCP: ربط نماذج اللغة الكبيرة بالعالم الحقيقي

في المشهد السريع التطور للذكاء الاصطناعي، تُعد نماذج اللغة الكبيرة (LLMs) قوية لكنها غالبًا معزولة. فهي تعتمد على المعرفة المُسبقة التدريب أو السياق المُحقن عبر الأوامر، مما قد يكون محدودًا أو ثابتًا أو مكلفًا من حيث الرموز. ظهر بروتوكول سياق النموذج (MCP) كمعيار لحل هذه المشكلة. طوّرته شركة Anthropic، وهو معيار مفتوح يتيح لتطبيقات نماذج اللغة الكبيرة الاتصال الآمن بمصادر البيانات والأدوات والبيئات الخارجية.

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

فهم بنية MCP

يعمل MCP على بنية عميل-خادم. يبدأ مضيف MCP (مثل Claude Desktop أو تطبيق مخصص) بالاتصال. يحتوي على عميل MCP يتواصل مع خادم أو أكثر من خوادم MCP. تعمل هذه الخوادم كجسور، حيث تعرض قدرات محددة (أدوات) أو بيانات (موارد) لنماذج اللغة الكبيرة في تنسيق منظم ومتوافق مع JSON-RPC.

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

تعريف القدرات: الأدوات مقابل الموارد

عند بناء خادم MCP، يجب أن تقرر ما ستعرضه. بشكل عام، تنقسم هذه إلى فئتين:

  • الأدوات: دوال يمكن للنموذج اللغوي تنفيذها. على سبيل المثال، "get_current_weather" أو "create_github_issue". هذه إجراءات ذات حالة تغير العالم أو تسترد بيانات حديثة.
  • الموارد: هياكل بيانات للقراءة فقط يمكن للنموذج اللغوي استرجاعها. على سبيل المثال، مسار نظام الملفات أو مخطط جدول قاعدة بيانات محدد. تُستخدم هذه عادةً لتقديم السياق دون الحاجة إلى استدعاء دالة.

بناء خادم MCP بسيط بلغة TypeScript

في هذا المثال، سنستخدم SDK الرسمي لـ MCP بلغة TypeScript لبناء خادم يعرض أداة "حاسبة" بسيطة. يتيح هذا الخادم للنموذج اللغوي إجراء عمليات حسابية أساسية.

أولاً، قم بتثبيت الاعتماديات اللازمة:


npm init -y
npm install @modelcontextprotocol/sdk zod
npm install -D typescript ts-node

الآن، دعنا ننشئ ملف الخادم الخاص بنا، server.ts. سنحدد الأداة باستخدام zod للتحقق من المخطط، مما يضمن أن تكون معاملات الإدخال مُنمطة بدقة.


import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

// Initialize the MCP Server
const server = new McpServer({
  name: "calculator-server",
  version: "1.0.0",
});

// Define a Tool: Calculate
server.tool(
  "calculate",
  {
    expression: z
      .string()
      .describe("A mathematical expression to evaluate, e.g., '2 + 2'"),
  },
  async ({ expression }) => {
    try {
      // Simple safety check: Only allow basic operators
      if (!/^[\d+\-*/(). ]+$/.test(expression)) {
        return {
          content: [{ type: "text", text: "Invalid characters in expression." }],
        };
      }

      // Note: In a production environment, use a safe math parser library.
      // Do NOT use eval() directly on user input.
      const result = new Function(`return ${expression}`)();
      
      return {
        content: [{ type: "text", text: `Result: ${result}` }],
      };
    } catch (error) {
      return {
        content: [{ type: "text", text: `Error: ${error.message}` }],
        isError: true,
      };
    }
  }
);

// Define a Resource: Current Timestamp
server.resource(
  "current-time",
  "time://now",
  { title: "Current Server Time" },
  async (uri) => {
    return {
      contents: [
        {
          uri: uri.toString(),
          text: new Date().toISOString(),
        },
      ],
    };
  }
);

// Run the Server
const transport = new StdioServerTransport();
server.connect(transport).catch(console.error);

تفاصيل التنفيذ الرئيسية

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

بالإضافة إلى ذلك، يكون معالجة الأخطاء صريحة. من خلال تعيين isError: true، تُعلم عميل MCP (وبالتالي النموذج اللغوي) أن تنفيذ الأداة فشل. هذا يتيح للنموذج اللغوي إعادة المحاولة بحجج مختلفة أو إخطار المستخدم بالفشل بسلاسة.

الاتصال بـ Claude Desktop

لاختبار خادمك، تحتاج إلى تكوين مضيف MCP الخاص بك. بالنسبة لـ Claude Desktop، تقوم بتحرير ملف claude_desktop_config.json (الموجود في ~/Library/Application Support/Claude/ على macOS أو %APPDATA%\Claude على Windows).


{
  "mcpServers": {
    "calculator": {
      "command": "npx",
      "args": ["ts-node", "/path/to/your/server.ts"]
    }
  }
}

أعد تشغيل Claude Desktop. يجب أن ترى الآن أداة "الحاسبة" متاحة في قائمة المطور أو قابلة للاستخدام مباشرة في الدردشة. اطلب من Claude "حساب 15 * 3" وشاهده يستدعي خادمك في الخلفية.

أفضل الممارسات والاعتبارات الأمنية

  1. أقل امتيازات: يجب أن يعرض خادم MCP الخاص بك الحد الأدنى من القدرات اللازمة فقط. إذا كنت تبني موصل قاعدة بيانات، فلا تعرض تنفيذ SQL الخام إذا كان بإمكانك تجنب ذلك. قدم دوالًا محددة وآمنة مثل getUserById.
  2. التحقق من المدخلات: تحقق دائمًا من المدخلات. على الرغم من أن النموذج اللغوي يولّد المدخلات، إلا أنه قد يرتكب أخطاء. استخدم التحقق من المخطط (مثل Zod) لرفض البيانات غير الصالحة قبل وصولها إلى منطق الخلفية الخاص بك.
  3. القدرة على التكرار (Idempotency): حيثما أمكن، صمم الأدوات لتكون قابلة للتكرار. إذا فشلت الأداة في منتصف الطريق، فقد يعيد النموذج اللغوي المحاولة. تأكد من أن إعادة المحاولة لا تسبب آثارًا جانبية مثل رسوم مكررة أو تلف البيانات.
  4. التسجيل (Logging): نفّذ تسجيلًا تفصيليًا داخل خادمك. عندما يكافح النموذج اللغوي لاستخدام أداة، ستوفر السجلات رؤى حول المعاملات التي تم تمريرها ولماذا قد يكون الاستدعاء قد فشل.

الاتجاهات المستقبلية

لا يزال MCP بروتوكولًا شابًا. مع نضجه، توقع أن ترى:

  • معايير المصادقة: تدفقات OAuth2 أكثر قوة مدمجة مباشرة في مواصفات البروتوكول للوصول الآمن إلى واجهات API المحمية.
  • موارد قابلة للتدفق: دعم أفضل لتدفقات البيانات في الوقت الفعلي، مما يتيح لنماذج اللغة الكبيرة مراقبة مصادر البيانات الحية مثل أسعار الأسهم أو سجلات الخوادم.
  • تنسيق متعدد الخوادم: قدرات محسنة للمضيفين لإدارة عشرات خوادم MCP في وقت واحد، مع توجيه ذكي لتجنب تضخم نافذة السياق.

الخلاصة

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

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

Share: