مقدمة في بروتوكول سياق النموذج (MCP)

Anis MarrouchiAI Bot
بواسطة Anis Marrouchi & AI Bot ·

جاري تحميل مشغل تحويل النص إلى كلام الصوتي...

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

لماذا استخدام MCP؟

MCP مفيد بشكل خاص لبناء الوكلاء وسير العمل المعقدة فوق نماذج اللغة الكبيرة. يوفر:

  • قائمة متنامية من التكاملات المبنية مسبقاً التي يمكن لنموذج اللغة الكبير الخاص بك الاتصال بها مباشرة.
  • المرونة للتبديل بين موفري ومورّدي نماذج اللغة الكبيرة.
  • أفضل الممارسات لتأمين بياناتك داخل بنيتك التحتية.

البنية العامة

يتبع MCP بنية عميل-خادم حيث يمكن لتطبيق مضيف الاتصال بخوادم متعددة:

بنية MCP
  • مضيفو MCP: برامج مثل Claude Desktop أو بيئات التطوير أو أدوات الذكاء الاصطناعي التي تريد الوصول إلى البيانات من خلال MCP.
  • عملاء MCP: عملاء البروتوكول الذين يحافظون على اتصالات 1:1 مع الخوادم.
  • خوادم MCP: برامج خفيفة يكشف كل منها عن قدرات محددة من خلال بروتوكول سياق النموذج الموحد.
  • مصادر البيانات المحلية: ملفات الحاسوب وقواعد البيانات والخدمات التي يمكن لخوادم MCP الوصول إليها بأمان.
  • الخدمات البعيدة: الأنظمة الخارجية المتاحة عبر الإنترنت (مثل واجهات برمجة التطبيقات) التي يمكن لخوادم MCP الاتصال بها.

بناء خادم MCP مع TypeScript

لنمشي خلال بناء خادم طقس MCP بسيط باستخدام TypeScript.

المتطلبات الأساسية

  • الإلمام بـ TypeScript.
  • Node.js الإصدار 16 أو أعلى مثبت.

إعداد المشروع

أولاً، أنشئ مجلداً جديداً لمشروعك وقم بتهيئته:

mkdir weather
cd weather
npm init -y

ثبّت التبعيات اللازمة:

npm install @modelcontextprotocol/sdk zod
npm install -D @types/node typescript

أنشئ هيكل المشروع:

mkdir src
touch src/index.ts

حدّث package.json ليتضمن سكريبت البناء:

{
  "type": "module",
  "bin": {
    "weather": "./build/index.js"
  },
  "scripts": {
    "build": "tsc && node -e \"require('fs').chmodSync('build/index.js', '755')\""
  },
  "files": [
    "build"
  ]
}

بناء الخادم

ابدأ باستيراد الحزم اللازمة:

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
} from "@modelcontextprotocol/sdk/types.js";
import { z } from "zod";

هيّئ مثيل الخادم:

const NWS_API_BASE = "https://api.weather.gov";
const USER_AGENT = "weather-app/1.0";
 
const AlertsArgumentsSchema = z.object({
  state: z.string().length(2),
});
 
const ForecastArgumentsSchema = z.object({
  latitude: z.number().min(-90).max(90),
  longitude: z.number().min(-180).max(180),
});
 
const server = new Server(
  {
    name: "weather",
    version: "1.0.0",
  },
  {
    capabilities: {
      tools: {},
    },
  }
);

نفّذ قائمة الأدوات:

server.setRequestHandler(ListToolsRequestSchema, async () => {
  return {
    tools: [
      {
        name: "get-alerts",
        description: "الحصول على تنبيهات الطقس لولاية",
        inputSchema: {
          type: "object",
          properties: {
            state: {
              type: "string",
              description: "رمز الولاية من حرفين (مثال CA، NY)",
            },
          },
          required: ["state"],
        },
      },
      {
        name: "get-forecast",
        description: "الحصول على توقعات الطقس لموقع",
        inputSchema: {
          type: "object",
          properties: {
            latitude: {
              type: "number",
              description: "خط العرض للموقع",
            },
            longitude: {
              type: "number",
              description: "خط الطول للموقع",
            },
          },
          required: ["latitude", "longitude"],
        },
      },
    ],
  };
});

أخيراً، نفّذ الدالة الرئيسية لتشغيل الخادم:

async function main() {
  const transport = new StdioServerTransport();
  await server.connect(transport);
  console.error("خادم MCP للطقس يعمل على stdio");
}
 
main().catch((error) => {
  console.error("خطأ فادح في main():", error);
  process.exit(1);
});

استخدام الخادم مع تطبيق JS طرفي

لاستخدام الخادم مع تطبيق JS طرفي، تحتاج إلى تكوين عميل MCP للاتصال بالخادم:

const { ClientSession, StdioServerParameters } = require('@modelcontextprotocol/sdk');
const { stdio_client } = require('@modelcontextprotocol/sdk/client/stdio');
 
async function connectToServer(serverScriptPath) {
  const serverParams = new StdioServerParameters({
    command: 'node',
    args: [serverScriptPath],
  });
 
  const transport = await stdio_client(serverParams);
  const session = new ClientSession(transport.stdio, transport.write);
 
  await session.initialize();
  return session;
}
 
async function main() {
  const session = await connectToServer('./build/index.js');
  const response = await session.listTools();
  console.log('الأدوات المتاحة:', response.tools);
}
 
main();

الخلاصة

بروتوكول سياق النموذج (MCP) هو أداة قوية لتوحيد تكامل نماذج الذكاء الاصطناعي. باتباع هذا الدليل، يمكنك بناء واستخدام خادم MCP مع TypeScript، مما يتيح التكامل السلس مع مصادر البيانات والأدوات المتنوعة. سواء كنت تبني سير عمل معقدة أو تطبيقات بسيطة، يوفر MCP المرونة والأمان اللازمين لتعزيز مشاريع الذكاء الاصطناعي الخاصة بك.

المرجع


هل تريد قراءة المزيد من الدروس التعليمية؟ تحقق من أحدث درس تعليمي لدينا على إتقان تدوين الملاحظات باستخدام FlutterFlow و Supabase: دليل شامل.

ناقش مشروعك معنا

نحن هنا للمساعدة في احتياجات تطوير الويب الخاصة بك. حدد موعدًا لمناقشة مشروعك وكيف يمكننا مساعدتك.

دعنا نجد أفضل الحلول لاحتياجاتك.

مقالات ذات صلة