كيفية استخدام خوادم MCP مع OpenRouter

@apidog

@apidog

21 أكتوبر 2025

كيفية استخدام خوادم MCP مع OpenRouter

Apidog للمؤسسات

النشر على الخوادم المحلية

SSO و RBAC

متوافق مع SOC 2

استكشف Apidog للمؤسسات

تتطور تقنية الذكاء الاصطناعي بسرعة، وإن دمج الأدوات الخارجية مع نماذج اللغة يعتبر خطوة حاسمة نحو الأمام. OpenRouter يوفر واجهة برمجة تطبيقات موحدة API للوصول إلى العديد من نماذج اللغة، بينما تسمح MCP Servers (خوادم بروتوكول سياق النموذج) لهذه النماذج بتنفيذ أدوات خارجية والوصول إلى بيانات حية. إن دمجها creates نظامًا قويًا لبناء تطبيقات الذكاء الاصطناعي المتقدمة.

في هذا المنشور، سأرشدك عبر دمج MCP Servers مع OpenRouter. ستتعلم الوظائف الأساسية لهما، وعملية الدمج، وأمثلة عملية.

💡
قبل البدء، قم بتحميل Apidog مجانًا هنا إنه أداة ممتازة لاختبار APIs وتصحيح إعدادك.
زر

فهم خوادم MCP وOpenRouter

لدمج MCP Servers مع OpenRouter، تحتاج أولاً إلى فهم وظيفة كل مكون.

OpenRouter: الوصول الموحد إلى نماذج اللغة

OpenRouter هو منصة تُبسط التفاعل مع نماذج اللغة الكبيرة (LLMs) من مزودين مثل OpenAI وAnthropic وxAI. يوفر نقطة نهاية وحيدة لواجهة برمجة التطبيقات API https://openrouter.ai/api/v1/chat/completions متوافقة مع هيكل واجهة برمجة تطبيقات OpenAI. تشمل المميزات الرئيسية:

ستحتاج إلى حساب OpenRouter ومفتاح API للمضي قدمًا. احصل على مفتاحك من openrouter.ai.

MCP Servers: توسيع قدرات النموذج

MCP Servers تطبق بروتوكول سياق النموذج، مما يسمح لـ LLMs باستدعاء الأدوات الخارجية. على عكس النماذج المستقلة التي تقتصر على بيانات التدريب الخاصة بها، تتيح MCP Servers التفاعل في الوقت الحقيقي مع أنظمة مثل دلائل الملفات وقواعد البيانات أو APIs الخارجية. تشمل تعريفات أدوات MCP النموذجية:

على سبيل المثال، قد يبدو تعريف أداة MCP لقائمة ملفات الدليل كما يلي:

{
  "name": "list_files",
  "description": "يُدرج الملفات في دليل محدد",
  "parameters": {
    "type": "object",
    "properties": {
      "path": {"type": "string", "description": "مسار الدليل"}
    },
    "required": ["path"]
  }
}

معًا، يوفر OpenRouter النموذج، وتقدم MCP Servers الأدوات، مما يشكل نظامًا بيئيًا قويًا للذكاء الاصطناعي.

لماذا دمج خوادم MCP مع OpenRouter؟

تقدم الجمع بين هذه التقنيات عدة مزايا فنية:

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

عملية الدمج خطوة بخطوة

الآن، دعنا ندخل في التفاصيل. إليك كيفية دمج MCP Servers مع OpenRouter.

المتطلبات السابقة

تأكد من أنك تمتلك:

زر

الخطوة 1: تعريف وتحويل أدوات MCP

تستخدم OpenRouter تنسيق استدعاء الأدوات الخاص بـ OpenAI، لذا يجب عليك تحويل تعريفات أدوات MCP. ابدأ بتعريف MCP:

{
  "name": "list_files",
  "description": "يُدرج الملفات في دليل محدد",
  "parameters": {
    "type": "object",
    "properties": {
      "path": {"type": "string", "description": "مسار الدليل"}
    },
    "required": ["path"]
  }
}

حوِّلها إلى تنسيق OpenAI عن طريق إضافة حقل type وتداخل تفاصيل الوظيفة:

{
  "type": "function",
  "function": {
    "name": "list_files",
    "description": "يُدرج الملفات في دليل محدد",
    "parameters": {
      "type": "object",
      "properties": {
        "path": {"type": "string", "description": "مسار الدليل"}
      },
      "required": ["path"]
    }
  }
}

هذا الهيكل JSON هو ما تتوقعه OpenRouter في الحمولة API الخاصة بها.

الخطوة 2: تكوين طلب API

أعد طلب API إلى OpenRouter. عرّف الرؤوس بمفتاح API الخاص بك وحمولة مع النموذج والرسائل والأدوات. إليك مثال باستخدام بايثون:

import requests
import json

# الرؤوس
headers = {
    "Authorization": "Bearer your_openrouter_api_key",
    "Content-Type": "application/json"
}

# الحمولة
payload = {
    "model": "openai/gpt-4",  # استبدل بنموذجك المفضل
    "messages": [
        {"role": "user", "content": "أدرج الملفات في الدليل الحالي."}
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "list_files",
                "description": "يُدرج الملفات في دليل محدد",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "path": {"type": "string", "description": "مسار الدليل"}
                    },
                    "required": ["path"]
                }
            }
        }
    ]
}

استبدل your_openrouter_api_key بمفتاحك الفعلي.

الخطوة 3: إرسال طلب API الأولي

قم بعمل طلب POST إلى نقطة نهاية OpenRouter:

response = requests.post(
    "https://openrouter.ai/api/v1/chat/completions",
    headers=headers,
    json=payload
)

response_data = response.json()

الخطوة 4: معالجة استدعاءات الأدوات

تحقق مما إذا كانت الاستجابة تحتوي على استدعاء أداة:

{
  "choices": [
    {
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_123",
            "type": "function",
            "function": {
              "name": "list_files",
              "arguments": "{\"path\": \".\"}"
            }
          }
        ]
      }
    }
  ]
}

استخرج تفاصيل استدعاء الأداة:

message = response_data["choices"][0]["message"]
if "tool_calls" in message:
    tool_call = message["tool_calls"][0]
    function_name = tool_call["function"]["name"]
    arguments = json.loads(tool_call["function"]["arguments"])

الخطوة 5: استدعاء خادم MCP

أرسل طلب الأداة إلى MCP Server الخاص بك:

mcp_response = requests.post(
    "http://localhost:8000/call",
    json={
        "name": function_name,
        "arguments": arguments
    }
)

tool_result = mcp_response.json()["result"]  # على سبيل المثال، ["file1.txt", "file2.txt"]

الخطوة 6: إعادة نتيجة الأداة إلى OpenRouter

أضف استدعاء الأداة للمعاون ونتيجته إلى سجل الرسائل:

messages = payload["messages"] + [
    {
        "role": "assistant",
        "content": null,
        "tool_calls": [tool_call]
    },
    {
        "role": "tool",
        "tool_call_id": tool_call["id"],
        "content": json.dumps(tool_result)
    }
]

# تحديث الحمولة
payload["messages"] = messages

# إرسال طلب متابعة
final_response = requests.post(
    "https://openrouter.ai/api/v1/chat/completions",
    headers=headers,
    json=payload
)

final_output = final_response.json()["choices"][0]["message"]["content"]
print(final_output)  # على سبيل المثال، "الملفات: file1.txt, file2.txt"

الخطوة 7: التعامل مع استدعاءات الأدوات المتعددة

إذا كان النموذج يتطلب استدعاءات أدوات متعددة، قم بالتكرار عبر العملية:

messages = payload["messages"]

while True:
    response = requests.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers=headers,
        json={"model": "openai/gpt-4", "messages": messages}
    )
    message = response.json()["choices"][0]["message"]
    
    if "tool_calls" not in message:
        print(message["content"])
        break
    
    for tool_call in message["tool_calls"]:
        function_name = tool_call["function"]["name"]
        arguments = json.loads(tool_call["function"]["arguments"])
        
        mcp_response = requests.post(
            "http://localhost:8000/call",
            json={"name": function_name, "arguments": arguments}
        )
        tool_result = mcp_response.json()["result"]
        
        messages.extend([
            {"role": "assistant", "content": null, "tool_calls": [tool_call]},
            {"role": "tool", "tool_call_id": tool_call["id"], "content": json.dumps(tool_result)}
        ])

هذا يضمن معالجة جميع استدعاءات الأدوات.

مثال عملي: تفاعل نظام الملفات

لنطبق هذا على سيناريو عملي لقائمة الملفات باستخدام MCP Server.

  1. تعريف الأداة: استخدم أداة list_files من السابق.
  2. خادم MCP: افترض أنه يعمل على http://localhost:8000.
  3. طلب API: أرسل "أدرج الملفات في الدليل الحالي" إلى OpenRouter.
  4. معالجة الاستجابة: يقوم النموذج باستدعاء list_files مع {"path": "."}.
  5. تنفيذ MCP: يُرجع الخادم ["file1.txt", "file2.txt"].
  6. النتيجة النهائية: يرد النموذج، "تم العثور على الملفات: file1.txt، file2.txt."

إليك الكود الكامل:

import requests
import json

headers = {"Authorization": "Bearer your_openrouter_api_key", "Content-Type": "application/json"}
payload = {
    "model": "openai/gpt-4",
    "messages": [{"role": "user", "content": "أدرج الملفات في الدليل الحالي."}],
    "tools": [{
        "type": "function",
        "function": {
            "name": "list_files",
            "description": "يُدرج الملفات في دليل محدد",
            "parameters": {
                "type": "object",
                "properties": {"path": {"type": "string", "description": "مسار الدليل"}},
                "required": ["path"]
            }
        }
    }]
}

response = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json=payload)
message = response.json()["choices"][0]["message"]

if "tool_calls" in message:
    tool_call = message["tool_calls"][0]
    function_name = tool_call["function"]["name"]
    arguments = json.loads(tool_call["function"]["arguments"])
    
    mcp_response = requests.post("http://localhost:8000/call", json={"name": function_name, "arguments": arguments})
    tool_result = mcp_response.json()["result"]
    
    messages = payload["messages"] + [
        {"role": "assistant", "content": null, "tool_calls": [tool_call]},
        {"role": "tool", "tool_call_id": tool_call["id"], "content": json.dumps(tool_result)}
    ]
    
    final_response = requests.post("https://openrouter.ai/api/v1/chat/completions", headers=headers, json={"model": "openai/gpt-4", "messages": messages})
    print(final_response.json()["choices"][0]["message"]["content"])

استكشاف الأخطاء الشائعة

إليك حلول للمشاكل الشائعة:

استخدم Apidog لتصحيح طلبات API والاستجابات بكفاءة.

توسيع الدمج

لتجاوز 2000 كلمة وإضافة عمق، ضع في اعتبارك هذه الإضافات:

مثال على استعلام قاعدة البيانات

حدد أداة MCP لاستعلام قاعدة البيانات:

{
  "type": "function",
  "function": {
    "name": "query_db",
    "description": "يستعلم عن قاعدة بيانات باستخدام SQL",
    "parameters": {
      "type": "object",
      "properties": {"sql": {"type": "string", "description": "استعلام SQL"}},
      "required": ["sql"]
    }
  }
}

أرسل "احصل على جميع المستخدمين من قاعدة البيانات" إلى OpenRouter، عالج استدعاء query_db، وعد النتائج مثل [{"id": 1, "name": "Alice"}].

معالجة الأخطاء

أضف معالجة أخطاء قوية:

try:
    mcp_response = requests.post("http://localhost:8000/call", json={"name": function_name, "arguments": arguments})
    mcp_response.raise_for_status()
except requests.RequestException as e:
    tool_result = f"خطأ: {str(e)}"

هذا يضمن بقاء تطبيقك مستقرًا.

الخلاصة

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

ابدأ بالتجربة الآن، احصل على Apidog مجانًا هنا لاختبار APIs الخاصة بك. دعني أعرف كيف تسير الأمور!

زر

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات