Ebben a bejegyzésben bemutatjuk, hogyan kell a Model Context Protocol (MCP) szervereket valós világú TypeScript alkalmazásban. használjuk a A projekt a mi bázisunk, a legjobb gyakorlatokra összpontosítva a biztonságos, méretezhető és karbantartható zenekarozás érdekében. Székesfehérvár.TS Azure utazási ügynökök Ha érdekli az Azure AI Travel Agents projekt áttekintése, kérjük, olvassa el bejelentési blogunkat! Blog hirdetés Miért llamaindex.TS és MCP? A llamaindex.TS moduláris, komposztálható keretet biztosít az LLM-alapú alkalmazások építéséhez a TypeScript-ben. Az MCP lehetővé teszi az eszközök interoperabilitását és streamingjét, így ideális a több AI szolgáltatás szervezéséhez. Projekt szerkezet A Llamaindex.TS zeneszerző él , különböző LLM backend és MCP kliensek szolgáltatói moduljaival. Jelenleg támogatjuk: src/api/src/orchestrator/llamaindex Az Azure megnyitása Docker modellek Azure AI Foundry helyi szolgáltatás GitHub modell Oltár Érezze magát szabadon, hogy vizsgálja meg a kódbázis és . Több szolgáltatót ajánlunk Az MCP kliens beállítása Streamable HTTP-vel Az MCP szerverekkel való interakcióhoz, anélkül, hogy Llamaindex.TS-t használnánk, egyéni megvalósítást írhatunk a hatékony, hitelesített és streaming kommunikációhoz. 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(); } } Mindig áthalad a Header a biztonságos hozzáféréshez, amint azt fentebb mutattuk. Best Practice: Authorization Egy MCP-eszköz manuális hívása Tegyük fel, hogy céljavaslatokat szeretne kapni az MCP szerverről: 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(); Mindig zárja be az MCP klienst, hogy felszabadítsa a forrásokat. Tip: Orchestrating LLM és MCP eszközök Llamaindex.TS A Ügyfél a megkönnyíti az MCP-kiszolgálókhoz való csatlakozást, és dinamikusan visszaszerzi az eszközmeghatározásokat.Az alábbiakban bemutatjuk a projekt orchestrator-beállításának mintáját, amely bemutatja, hogyan kell használni eszközöket gyűjteni és ügynököket létrehozni az egyes MCP szerverekhez. mcp @llamaindex/tools mcp Íme egy példa arra, hogy milyen Az objektum úgy néz ki, mint: 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 }; Ezután használhatja ezt a konfigurációt a Az ügyfél: 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, }); Ezt a mintát megismételheti egy többügynökös munkafolyamat összeállításához, ahol minden egyes ügynök az MCP-kiszolgálóról futási időben felfedezett eszközökkel működik. . Teljes példa Ezután ezt az LLM példányt használhatja az MCP-eszközökhöz intézett hívások szervezésére, például útvonaltervezésre vagy célállomás-ajánlásra. Biztonsági megfontolások Mindig használjon hozzáférési tokeneket és biztonságos fejléceket. Soha ne titkolja a hardcode-t; használjon környezeti változókat és titkos menedzsereket. Csatlakozz a közösséghez: Arra ösztönözzük Önt, hogy csatlakozzon az Azure AI Foundry fejlesztői közösségünkhöz, hogy megosszák tapasztalataikat, kérdéseket tegyenek fel és támogatást kapjanak: aka.ms/foundry/discord Csatlakozzon a Discord közösségünkhöz a valós idejű megbeszélésekhez és támogatáshoz. aka.ms/foundry/forum - Látogasson el az Azure AI Foundry fejlesztői fórumunkra, hogy kérdéseket tegyen fel és megosszon ismereteit. következtetés A llamaindex.TS és az MCP Streamable HTTP közlekedésének kombinálásával erős, biztonságos és skálázható mesterséges intelligencia-munkafolyamatokat szervezhet a TypeScript-ben. References: llamaindex.TS dokumentáció MCP Streamable HTTP Spec szolgáltatás Azure AI utazási ügynökök mintája