Nan pòs sa a, nou pral montre ki jan yo oryante Modèl Protocol Konteks (MCP) sèvè lè l sèvi avèk nan yon aplikasyon TypeScript mond reyèl. Nou pral itilize pwojè a kòm baz nou an, konsantre sou pratik yo pi byen pou sekirite, skalab, ak òkestrasyon ki manyen. Senpleman santi ou lib yo star repo a pou yo dwe anonse sou dènye chanjman yo. Pwodwi pou Telefòn Azure Ajans Vwayaj Si ou enterese nan yon konvèsyon sou pwojè a Azure AI Vwayaj Agents, tanpri li blog anons nou an! Blog piblisite Poukisa llamaindex.TS ak MCP? llamaindex.TS bay yon modilè, kompozab framework pou bati LLM-powered aplikasyon nan TypeScript. MCP pèmèt interoperabilite zouti ak streaming, fè li ideyal pou òkestrasyon plizyè sèvis AI. Estrikti nan pwojè Orkestrateur Llamaindex.TS ap viv nan , ak modil founisè pou diferan backend LLM ak kliyan MCP. Nou kounye a sipòte: src/api/src/orchestrator/llamaindex Kòmanse nan Azure Modèl Docker Azure AI Foundry lokal Modèl GitHub Olye santi yo lib yo eksplore codebase a ak . Sije plis founisè Konfigirasyon kliyan MCP ak Streamable HTTP Pou interaksyon ak serveurs MCP, san yo pa sèvi ak Llamaindex.TS, nou ka ekri yon implementation Custom lè l sèvi avèk pou efikas, otantifikasyon, ak transmèt kominikasyon. 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(); } } Toujou pase header pou aksè an sekirite, kòm te montre pi wo a. Best Practice: Authorization Konvèti yon zouti MCP manyen Si ou vle jwenn rekòmandasyon destinasyon soti nan sèvè a 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(); Toujou fèmen kliyan an MCP graciously pou libere resous. Tip: Orchestrating LLMs ak zouti MCP ak Llamaindex.TS nan Kliyan nan fè li fasil konekte nan serveurs MCP ak retrè definisyon zouti dinamikman. Anba a se yon echantiyon soti nan pwojè a nan enstalasyon orchestrator, ki montre ki jan yo sèvi ak jwenn zouti ak kreye ajan pou chak serveur MCP. mcp @llamaindex/tools mcp Isit la se yon egzanp nan ki Objè a ka sanble tankou: 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 }; Lè sa a, ou ka sèvi ak sa a konfig ak Kliyan an: 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, }); Èske ou ka repete modèl sa a yo kreye yon flux travay plizyè-agents kote chak ajan se pouvwa pa zouti detekte nan kouri tan soti nan sèvè a MCP. Al gade nan pwojè pou . Yon egzanp plen Èske ou ka Lè sa a, sèvi ak instans sa a LLM nan orèz apèl nan zouti MCP, tankou planifikasyon vwayaj oswa rekòmandasyon destinasyon. Konsèy sekirite Toujou itilize token aksè ak tèt sekirite. Jodi a, pa gen okenn sekrè, sèvi ak varyab anviwònman ak manadjè sekrè. Jwenn nan kominote a: Nou ankouraje ou yo rantre nan Azure AI Foundry devlopè kominote nou an pou pataje eksperyans ou, fè kesyon, ak jwenn sipò: aka.ms/foundry/discord Jwenn nan kominote Discord nou an pou diskisyon ak sipò nan tan reyèl. aka.ms/foundry/forum - Vizite Foundry Developer Forum nou an pou fè kesyon ak pataje konesans ou. Konklisyon Pa konbine llamaindex.TS ak transfè HTTP Streamable nan MCP, ou ka òkestre potansyèl, san danje, ak scalable travay AI nan TypeScript. Pwojè a Azure AI Travay Agents bay yon modèl robust pou bati òkestrateur pwòp ou. References: llamaindex.TS Dokiman MCP Streamable HTTP Spec Azure AI Vwayaj Agents echantiyon