Как использовать llamaindex.ts для организации серверов MCP

Как использовать llamaindex.ts для организации серверов MCP

8 июля 2025 г.

В этом посте мы продемонстрируем, как организовать серверы организма модельного протокола контекста (MCP), используяLmamaindex.tsв реальном приложении типового тиража. Мы будем использоватьAzure AI Travel AgentsПроект как наша база, сосредоточившись на лучших практиках для безопасной, масштабируемой и обслуживающейся оркестровки. Не стесняйтесь сниматься в репо, чтобы получить уведомление о последних изменениях.

Если вы заинтересованы в обзоре проекта Azure AI Travel Agents, прочитайте нашОбъявление блог!


Почему llamaindex.ts и mcp?

  • Lmamaindex.tsОбеспечивает модульную композиционную структуру для строительства приложений LLM-мощных приложений в TypeScript.
  • MCPОбеспечивает взаимодействие и потоковую передачу инструментов, что делает его идеальным для организации нескольких услуг искусственного интеллекта.

Структура проекта

Оркестратор lmamaindex.ts живет вsrc/api/src/orchestrator/llamaindex, с модулями поставщиков для различных бэкэндов LLM и клиентов MCP. Мы в настоящее время поддерживаем:

  • Azure openai
  • Docker Models
  • Lazure 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();
  }
}

Лучшая практика:Всегда проходите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 изящно, чтобы выпустить ресурсы.


Орхэгстрации LLMS и инструменты MCP с LmamainDex.ts

АmcpКлиент от@llamaindex/toolsОблегчает подключение к серверам MCP и динамически извлекать определения инструментов. Ниже приведен образец из настройки оркестратора проекта, показывающий, как использоватьmcpЧтобы получить инструменты и создавать агенты для каждого сервера 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, вы можете организовать мощные, безопасные и масштабируемые рабочие процессы ИИ в типографии. Проект Azure AI Travel Agents предоставляет надежный шаблон для создания собственного оркестратора.

Ссылки:

  • LmamainDex.ts документация
  • MCP -потоковая http spect
  • Azure AI Travel Agents Образец


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE