В этой статье мы продемонстрируем, как оркестрировать серверы модели контекстного протокола (MCP) с помощью в реальном мире приложении TypeScript. мы будем использовать проект как наша база, сосредоточившись на лучших практиках для безопасной, масштабируемой и поддерживаемой оркестрации. Изображение Индекс.ТС Azure для путешественников Если вы заинтересованы в обзоре проекта Azure AI Travel Agents, пожалуйста, ознакомьтесь с нашим блогом объявлений! Блог объявления Почему llamaindex.TS и MCP? llamaindex.TS предоставляет модульную, компостируемую структуру для создания приложений с поддержкой LLM в TypeScript. MCP обеспечивает совместимость инструментов и потоковую передачу, что делает его идеальным для оркестрации нескольких услуг ИИ. Структура проекта Оркестр Llamaindex.TS живет в , с модулями поставщика для различных бак-эндов LLM и клиентов MCP. Мы в настоящее время поддерживаем: src/api/src/orchestrator/llamaindex Azure OpenAI Докер модели Обзор Azure AI Foundry Local Модель GitHub Ольга Почувствуйте себя свободными, чтобы исследовать кодовую базу и . Предлагаем больше провайдеров Настройка клиента MCP с потоковым HTTP Чтобы взаимодействовать с MCP-серверами, не используя Llamaindex.TS, мы можем написать индивидуальную реализацию, используя для эффективной, аутентичной и потоковой коммуникации. StreamableHTTPClientTransport // filepath: src/api/src/mcp/mcp-http-client.ts import EventEmitter from 'node:events'; import { Client } from '@modelcontextprotocol/sdk/client/index.js'; import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'; export class MCPClient extends EventEmitter { private client: Client; private transport: StreamableHTTPClientTransport; constructor(serverName: string, serverUrl: string, accessToken?: string) { this.transport = new StreamableHTTPClientTransport({ url: serverUrl, headers: accessToken ? { Authorization: `Bearer ${accessToken}` } : {}, }); this.client = new Client(serverName, this.transport); } async connect() { await this.client.initialize(); } async listTools() { return this.client.listTools(); } async callTool(name: string, toolArgs: any) { return this.client.callTool(name, toolArgs); } async close() { await this.client.closeGracefully(); } } Всегда проходит через Header для безопасного доступа, как показано выше. Best Practice: Authorization Название инструмента MCP вручную Предположим, что вы хотите получить целевые рекомендации с сервера MCP: import { MCPClient } from '../../mcp/mcp-http-client'; const DESTINATION_SERVER_URL = process.env.MCP_DESTINATION_RECOMMENDATION_URL!; const ACCESS_TOKEN = process.env.MCP_DESTINATION_RECOMMENDATION_ACCESS_TOKEN; const mcpClient = new MCPClient('destination-recommendation', DESTINATION_SERVER_URL, ACCESS_TOKEN); await mcpClient.connect(); const tools = await mcpClient.listTools(); console.log('Available tools:', tools); const result = await mcpClient.callTool('getDestinationsByPreferences', { activity: 'CULTURAL', budget: 'MODERATE', season: 'SUMMER', familyFriendly: true, }); console.log('Recommended destinations:', result); await mcpClient.close(); Всегда грациозно закрывайте клиент MCP, чтобы освободить ресурсы. Tip: Оркестрация LLM и инструментов MCP с Llamaindex.TS ТЭ Клиент от облегчает подключение к серверам MCP и динамическое извлечение определений инструментов. Ниже приведен образец настройки оркестратора проекта, показывающий, как использовать для получения инструментов и создания агентов для каждого MCP-сервера. mcp @llamaindex/tools mcp Вот пример того, что Объект может выглядеть так: mcpServerConfig const mcpServerConfig = { url: "http://localhost:5007", // MCP server endpoint accessToken: process.env.MCP_ECHO_PING_ACCESS_TOKEN, // Secure token from env name: "echo-ping", // Logical name for the server }; Затем вы можете использовать эту конфигурацию с Клиент : mcp import { mcp } from "@llamaindex/tools"; import { agent, multiAgent, ToolCallLLM } from "llamaindex"; // ...existing code... const mcpServerConfig = mcpToolsConfig["echo-ping"].config; const tools = await mcp(mcpServerConfig).tools(); const echoAgent = agent({ name: "EchoAgent", systemPrompt: "Echo back the received input. Do not respond with anything else. Always call the tools.", tools, llm, verbose, }); agentsList.push(echoAgent); handoffTargets.push(echoAgent); toolsList.push(...tools); // ...other code... const travelAgent = agent({ name: "TravelAgent", systemPrompt: "Acts as a triage agent to determine the best course of action for the user's query. If you cannot handle the query, please pass it to the next agent. If you can handle the query, please do so.", tools: [...toolsList], canHandoffTo: handoffTargets .map((target) => target.getAgents().map((agent) => agent.name)) .flat(), llm, verbose, }); agentsList.push(travelAgent); // Create the multi-agent workflow return multiAgent({ agents: agentsList, rootAgent: travelAgent, verbose, }); Вы можете повторить этот шаблон, чтобы составить многоагентный рабочий процесс, в котором каждый агент поддерживается инструментами, обнаруженными в рабочем времени с сервера MCP. . Полный пример Затем вы можете использовать этот экземпляр LLM для оркестрации вызовов к инструментам MCP, таким как планирование маршрута или рекомендации направлений. соображения безопасности Всегда используйте токены доступа и защищенные заголовки. Никогда не секретируйте жесткий код; используйте переменные окружающей среды и секретные менеджеры. Присоединяйтесь к сообществу: Мы рекомендуем вам присоединиться к нашему сообществу разработчиков Azure AI Foundry, чтобы поделиться своим опытом, задавать вопросы и получать поддержку: aka.ms/foundry/discord Присоединяйтесь к нашему сообществу Discord для обсуждения и поддержки в режиме реального времени. aka.ms/foundry/forum - Посетите наш форум разработчиков Azure AI Foundry, чтобы задать вопросы и поделиться своими знаниями. Заключение Сочетая llamaindex.TS с потоковой HTTP-транспортом MCP, вы можете организовать мощные, безопасные и масштабируемые рабочие процессы ИИ в TypeScript. References: Ламаиндекс.ТС Документация MCP Streamable HTTP Spec Образец Azure AI Travel Agents