الانتقال إلى المحتوى الرئيسي

نظرة عامة

يوفر نقل Streamable HTTP طريقة مرنة للاتصال بخوادم MCP البعيدة. يُبنى عادةً على HTTP ويمكنه دعم أنماط اتصال متنوعة، بما في ذلك الطلب والاستجابة والبث، وأحياناً يستخدم Server-Sent Events (SSE) لتدفقات من الخادم إلى العميل ضمن تفاعل HTTP أوسع.

المفاهيم الرئيسية

  • خوادم بعيدة: مصمم لخوادم MCP المستضافة عن بُعد.
  • المرونة: يمكنه دعم أنماط تفاعل أكثر تعقيداً من SSE العادي، بما في ذلك الاتصال ثنائي الاتجاه المحتمل إذا نفذه الخادم.
  • إعداد MCPServerAdapter: ستحتاج إلى توفير عنوان URL الأساسي للخادم للاتصال MCP وتحديد "streamable-http" كنوع النقل.

الاتصال عبر Streamable HTTP

لديك طريقتان رئيسيتان لإدارة دورة حياة الاتصال مع خادم MCP Streamable HTTP:

1. اتصال مُدار بالكامل (الموصى به)

النهج الموصى به هو استخدام مدير سياق Python (تعليمة with)، الذي يتعامل مع إعداد الاتصال وإنهائه تلقائياً.
from crewai import Agent, Task, Crew, Process
from crewai_tools import MCPServerAdapter

server_params = {
    "url": "http://localhost:8001/mcp", # Replace with your actual Streamable HTTP server URL
    "transport": "streamable-http"
}

try:
    with MCPServerAdapter(server_params) as tools:
        print(f"Available tools from Streamable HTTP MCP server: {[tool.name for tool in tools]}")

        http_agent = Agent(
            role="HTTP Service Integrator",
            goal="Utilize tools from a remote MCP server via Streamable HTTP.",
            backstory="An AI agent adept at interacting with complex web services.",
            tools=tools,
            verbose=True,
        )

        http_task = Task(
            description="Perform a complex data query using a tool from the Streamable HTTP server.",
            expected_output="The result of the complex data query.",
            agent=http_agent,
        )

        http_crew = Crew(
            agents=[http_agent],
            tasks=[http_task],
            verbose=True,
            process=Process.sequential
        )

        result = http_crew.kickoff()
        print("\nCrew Task Result (Streamable HTTP - Managed):\n", result)

except Exception as e:
    print(f"Error connecting to or using Streamable HTTP MCP server (Managed): {e}")
    print("Ensure the Streamable HTTP MCP server is running and accessible at the specified URL.")

ملاحظة: استبدل "http://localhost:8001/mcp" بعنوان URL الفعلي لخادم MCP Streamable HTTP الخاص بك.

2. دورة حياة اتصال يدوية

للسيناريوهات التي تتطلب تحكماً أكثر صراحة، يمكنك إدارة اتصال MCPServerAdapter يدوياً.
من الضروري استدعاء mcp_server_adapter.stop() عند الانتهاء لإغلاق الاتصال وتحرير الموارد. كتلة try...finally هي الطريقة الأكثر أماناً لضمان ذلك.
from crewai import Agent, Task, Crew, Process
from crewai_tools import MCPServerAdapter

server_params = {
    "url": "http://localhost:8001/mcp", # Replace with your actual Streamable HTTP server URL
    "transport": "streamable-http"
}

mcp_server_adapter = None
try:
    mcp_server_adapter = MCPServerAdapter(server_params)
    mcp_server_adapter.start()
    tools = mcp_server_adapter.tools
    print(f"Available tools (manual Streamable HTTP): {[tool.name for tool in tools]}")

    manual_http_agent = Agent(
        role="Advanced Web Service User",
        goal="Interact with an MCP server using manually managed Streamable HTTP connections.",
        backstory="An AI specialist in fine-tuning HTTP-based service integrations.",
        tools=tools,
        verbose=True
    )

    data_processing_task = Task(
        description="Submit data for processing and retrieve results via Streamable HTTP.",
        expected_output="Processed data or confirmation.",
        agent=manual_http_agent
    )

    data_crew = Crew(
        agents=[manual_http_agent],
        tasks=[data_processing_task],
        verbose=True,
        process=Process.sequential
    )

    result = data_crew.kickoff()
    print("\nCrew Task Result (Streamable HTTP - Manual):\n", result)

except Exception as e:
    print(f"An error occurred during manual Streamable HTTP MCP integration: {e}")
    print("Ensure the Streamable HTTP MCP server is running and accessible.")
finally:
    if mcp_server_adapter and mcp_server_adapter.is_connected:
        print("Stopping Streamable HTTP MCP server connection (manual)...")
        mcp_server_adapter.stop()  # **Crucial: Ensure stop is called**
    elif mcp_server_adapter:
        print("Streamable HTTP MCP server adapter was not connected. No stop needed or start failed.")

اعتبارات الأمان

عند استخدام نقل Streamable HTTP، فإن أفضل ممارسات أمان الويب العامة ضرورية:
  • استخدم HTTPS: فضّل دائماً HTTPS لعناوين URL خوادم MCP لتشفير البيانات أثناء النقل.
  • المصادقة: نفّذ آليات مصادقة قوية إذا كان خادم MCP يكشف أدوات أو بيانات حساسة.
  • التحقق من المدخلات: تأكد من أن خادم MCP يتحقق من جميع الطلبات والمعاملات الواردة.
للحصول على دليل شامل حول تأمين تكاملات MCP، يرجى الرجوع إلى صفحة اعتبارات الأمان ووثائق أمان نقل MCP الرسمية.