Model Context Protocol (MCP)

MCP در مقابل OpenAPI: پل ارتباطی بین عامل‌های هوش مصنوعی و APIهای REST

منظره یکپارچه‌سازی هوش مصنوعی به سرعت در حال تحول است. در حالی که OpenAPI از مدت‌ها پیش معیار طلایی مستندسازی APIهای REST بوده است، پروتکل زمینه مدل (MCP) به عنوان معیار واقعاً رایج برای امکان‌پذیر کردن تعامل عامل‌های هوش مصنوعی با ابزارها و منابع داده ظهور کرده است. با این حال، بسیاری از سازمان‌ها با چالشی مواجه هستند: آن‌ها مشخصات گسترده OpenAPI دارند اما نیاز دارند این قابلیت‌ها را از طریق MCP به LLMها ارائه دهند. این پست بررسی می‌کند که این دو مشخصه چگونه مقایسه می‌شوند و چگونه می‌توان به طور مؤثر پل ارتباطی بین آن‌ها برای همکاری بین پروتکولی ایجاد کرد.

درک تفاوت‌های اصلی

در هسته خود، هر دو MCP و OpenAPI تعاریف مبتنی بر JSON Schema هستند، اما فلسفه طراحی آن‌ها به طور قابل توجهی متفاوت است. OpenAPI برای مستندسازی API قابل خواندن توسط انسان و قراردادها درخواست/پاسخ سختگیرانه طراحی شده است. بر روی روش‌های HTTP، مسیرها و طرح‌های امنیتی تمرکز دارد. MCP، از طرف دیگر، برای ارتباط ماشین به ماشین، به ویژه برای کشف و فراخوانی ابزارها توسط LLMها طراحی شده است. جزئیات HTTP را انتزاعی می‌کند و بر توصیف‌های معنایی تمرکز دارد که به مدل‌ها کمک می‌کند تا نیت و نحوه استفاده را درک کنند.

تفاوت‌های کلیدی عبارتند از:

  • لایه انتقال: OpenAPI به معنای HTTP/HTTPS است. MCP مستقل از انتقال است و اغلب از stdio یا HTTP قابل جریان‌سازی استفاده می‌کند.
  • دقت اسکیما: OpenAPI به تایپ سختگیرانه برای تمام بدنه‌های درخواست نیاز دارد. MCP اغلب ورودی‌های انعطاف‌پذیر را می‌پذیرد و به مدل متکی است تا استدلال‌های زبان طبیعی را به داده‌های ساختاریافته تجزیه کند.
  • هدف توصیف: توصیف‌های OpenAPI به توسعه‌دهندگان در پیاده‌سازی کلاینت‌ها کمک می‌کند. توصیف‌های MCP به LLMها کمک می‌کند تا تصمیم بگیرند کِی و چگونه از یک ابزار استفاده کنند.

مقایسه تعاریف ابزارها

یک "عملیات" OpenAPI به یک "ابزار" MCP نگاشت می‌شود. بیایید یک مثال عملی را بررسی کنیم. فرض کنید یک تابع ساده برای جستجو در پایگاه داده داریم.

تعریف OpenAPI 3.0:


openapi: 3.0.0
info:
  title: Search API
  version: 1.0.0
paths:
  /search:
    post:
      operationId: searchItems
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                query:
                  type: string
                  description: The search term
              required:
                - query
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object

تعریف ابزار MCP:


{
  "name": "search_items",
  "description": "Searches the product database for items matching the provided query. Returns a list of products with name and price.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "The keyword or phrase to search for in product names or descriptions."
      }
    },
    "required": ["query"]
  }
}

توجه کنید که تعریف MCP شامل یک فیلد "توصیف" توصیفی‌تر است. این نکته حیاتی است زیرا LLMها به این متن متکی هستند تا کاربرد ابزار را درک کنند. مشخصه OpenAPI بر `operationId` و ساختار مسیر متکی است که برای مدلی که در حال استدلال درباره اقدامات است، کمتر شهودی هستند.

راهبردها برای همکاری

هنگام تبدیل OpenAPI به MCP، یا برعکس، نباید به یک تبدیل JSON ساده 1:1 متکی شوید. به جای آن، راهبردهای زیر را در نظر بگیرید:

  1. ثراء معنایی: از یک LLM برای تولید توصیف‌های بهبودیافته برای ابزارهای MCP بر اساس مشخصه OpenAPI استفاده کنید. سند اصلی ممکن است بگوید "دریافت شناسه کاربر"، اما توصیف ابزار MCP باید بگوید "شناسه منحصربه‌فرد کاربر احراز هویت شده فعلی را بازیابی می‌کند". این زمینه به مدل کمک می‌کند تا ابزار را به درستی استفاده کند.
  2. تسطیح پارامترها: OpenAPI اغلب از آبجکت‌های تودرتو در بدنه درخواست‌ها استفاده می‌کند. MCP با اسکیماهای ورودی تخت و ساده بهترین عملکرد را دارد. ساختارهای JSON تودرتو را در صورت امکان به پارامترهای فردی تسطیح کنید تا ابهام برای LLM کاهش یابد.
  3. انتزاع مدیریت خطا: OpenAPI کدهای وضعیت HTTP را تعریف می‌کند. ابزارهای MCP معمولاً یک آبجکت نتیجه واحد را برمی‌گردانند. پیاده‌سازی سرور MCP شما باید خطاهای HTTP را از API OpenAPI زیربنایی بگیرد و آن‌ها را به پیام‌های خطای معنادار در پاسخ MCP تبدیل کند، به جای اینکه 404 خام را به مدل نشان دهد.

بهترین روش‌های پیاده‌سازی

برای ساخت یک پل ارتباطی مستحکم، کلاینت OpenAPI خود را درون سرور MCP خود بپیچید. سرور MCP به عنوان یک سازگار عمل می‌کند. فراخوانی ابزار را از LLM دریافت می‌کند، درخواست HTTP را که در مشخصه OpenAPI تعریف شده است، می‌سازد، آن را اجرا می‌کند و پاسخ را به یک نتیجه سازگار با MCP قالب‌بندی می‌کند.


// Pseudo-code for an MCP Server handler
async function handleSearchTool(args) {
  // 1. Validate args against MCP inputSchema
  if (!args.query) throw new McpError("Missing query");

  // 2. Construct HTTP request based on OpenAPI logic
  const response = await fetch("https://api.example.com/search", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ query: args.query })
  });

  // 3. Handle errors
  if (!response.ok) {
    return { content: [{ type: "text", text: `Search failed: ${response.statusText}` }] };
  }

  // 4. Format success response for MCP
  const data = await response.json();
  return {
    content: [{
      type: "text",
      text: `Found ${data.length} items: ${data.map(i => i.name).join(", ")}`
    }]
  };
}

نتیجه‌گیری

OpenAPI و MCP رقبا نیستند، بلکه استانداردهای مکمل هستند. OpenAPI قرارداد رفتار API شما را تعریف می‌کند، در حالی که MCP رابطی را تعریف می‌کند که عامل‌های هوش مصنوعی چگونه آن رفتار را ادراک و با آن تعامل می‌کنند. با درک تفاوت‌ها در دقت اسکیما و نیت توصیفی، می‌توانید سازگارهای مؤثری بسازید که APIهای REST موجود شما را به دنیای عامل‌های هوش مصنوعی ارائه می‌دهند. با رشد پذیرش MCP، حفظ نگاشت واضح بین مشخصات OpenAPI و تعاریف ابزارهای MCP برای هر کسی که در حال ساخت اپلیکیشن‌های مقیاس‌پذیر مبتنی بر هوش مصنوعی است، ضروری خواهد بود.

Share: