Chào mừng bạn đến với bài học cuối cùng của khóa học! Trong suốt 19 bài học qua, chúng ta đã tự viết mã nguồn cho từng Công cụ (Tools). Tuy nhiên, trong thực tế, việc viết lại code để kết nối với Google Drive, GitHub, Slack hay SQL Database cho mỗi dự án là rất tốn kém. Bài học này sẽ giới thiệu Model Context Protocol (MCP) – giải pháp giúp Agent của bạn sử dụng lại các công cụ có sẵn từ hệ sinh thái toàn cầu, xây dựng trên nền tảng tiện ích đã thiết lập từ Bài 1.
I. MCP là gì?
Model Context Protocol (MCP) là một giao thức mở (do Anthropic khởi xướng) giúp các ứng dụng AI dễ dàng tiếp cận với dữ liệu và công cụ theo một chuẩn chung.
- MCP Server: Nơi chứa các công cụ logic (ví dụ: một server chuyên kết nối với Database).
- MCP Client (Agent của bạn): Chỉ cần "cắm" vào server đó thông qua giao thức chuẩn để lấy các công cụ về dùng mà không cần quan tâm server đó viết bằng ngôn ngữ gì.
II. Tại sao MCP là tương lai của AI Agent?
- Tính tái sử dụng: Bạn có thể tìm thấy hàng trăm MCP Server có sẵn cho Slack, Gmail, GitHub... trên Smithery.ai và tích hợp vào Agent trong 1 phút.
- Ngôn ngữ trung lập: Server có thể viết bằng Python hoặc Go, nhưng Client LangChain (Node.js) của chúng ta vẫn gọi được bình thường.
- Bảo mật: Tách biệt hoàn toàn logic truy cập dữ liệu nhạy cảm (nằm ở Server) và logic suy luận của Agent (Client).
III. Mã nguồn: 20-model-context-protocol.ts
Chúng ta sẽ mô phỏng một hệ thống gồm 2 phần. Đầu tiên là một MCP Server (giả lập server tính toán) và sau đó là một LangChain Agent sử dụng tiện ích của chúng ta để kết nối.
1. Chuẩn bị MCP Server (scripts/mcp-server.ts)
Server này sẽ cung cấp công cụ power_calculator thông qua giao thức truyền tin tiêu chuẩn (stdio).
// scripts/mcp-server.ts
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import {
CallToolRequestSchema,
ListToolsRequestSchema,
} from '@modelcontextprotocol/sdk/types.js';
const server = new Server(
{ name: 'math-server', version: '1.0.0' },
{ capabilities: { tools: {} } },
);
// Define tools available on this server
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: 'power_calculator',
description: 'Calculate the power of a number (base^exponent).',
inputSchema: {
type: 'object',
properties: {
base: { type: 'number' },
exponent: { type: 'number' },
},
required: ['base', 'exponent'],
},
},
],
}));
// Handle tool execution
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === 'power_calculator') {
const { base, exponent } = request.params.arguments as any;
return {
content: [{ type: 'text', text: String(Math.pow(base, exponent)) }],
};
}
throw new Error('Tool not found');
});
const transport = new StdioServerTransport();
await server.connect(transport);2. Agent kết nối MCP (scripts/20-model-context-protocol.ts)
Chúng ta sử dụng MultiServerMCPClient từ LangChain để "vay mượn" công cụ từ server trên.
// apps/langchain/scripts/20-model-context-protocol.ts
// pnpm --filter=ai-notes-langchain run tsx scripts/20-model-context-protocol.ts
import './env';
import { MultiServerMCPClient } from '@langchain/mcp-adapters';
import { createAgent } from 'langchain';
import { createGeminiModel, generateImage } from '@workspace/util-langchain';
async function main() {
// 1. Initialize MCP Client to connect to our math server
const client = new MultiServerMCPClient({
math_provider: {
transport: 'stdio',
command: 'npx',
args: ['tsx', 'scripts/mcp-server.ts'], // Path to the server script
},
});
// 2. Automatically discover and load tools from the MCP Server
const mcpTools = await client.getTools();
console.log(
`[SYSTEM]: Successfully loaded ${mcpTools.length} tools from MCP Server.`,
);
// 3. Initialize Agent using Gemini 2.5 Flash and MCP tools
const model = createGeminiModel();
const agent = createAgent({
model,
tools: mcpTools,
systemPrompt: 'You are a mathematical expert using external MCP tools.',
});
// 4. Generate visual diagram
await generateImage(
agent,
'images/courses/langchain-course/scripts-20-mcp.jpg',
);
console.log('--- Agent performing calculation via MCP... ---');
// 5. Test the integration
const response = await agent.invoke({
messages: [
{ role: 'user', content: 'Please calculate 2 to the power of 10.' },
],
});
console.log('\nAI Response:');
console.log(response.messages.at(-1).content);
}
main().catch(console.error);IV. Phân tích kỹ thuật
MultiServerMCPClient: Đây là bộ adapter của LangChain cho phép bạn kết nối tới nhiều server MCP cùng lúc. Agent của bạn có thể vừa lấy tool từ một server Python, vừa lấy từ một server Node.js một cách mượt mà.- Discovery (Khám phá): Điểm mạnh nhất của MCP là Agent không cần biết code của tool. Nó chỉ cần hỏi server "Bạn có những tool gì?" qua hàm
getTools(), và mọi thứ sẽ được tự động cấu hình. - Sơ đồ hoạt động: Bạn có thể thấy cấu trúc Agent vẫn không thay đổi, nhưng danh sách
toolshiện tại được cung cấp từ một thực thể bên ngoài (MCP Server):

V. 🎉 TỔNG KẾT KHÓA HỌC
Chúc mừng bạn đã hoàn thành chặng đường 20 bài học của "Master AI Agents with LangChain"!
Bạn đã đi một hành trình dài từ những bước sơ khai cho đến những kỹ thuật đỉnh cao nhất hiện nay:
- Nền tảng: Thiết lập môi trường chuyên nghiệp với
env.tsvàutil-langchain. - Kỹ năng lõi: Làm chủ vòng lặp ReAct, xây dựng Tools với Zod, và quản lý Structured Output.
- Hệ thần kinh: Can thiệp sâu bằng Middleware Hooks, xử lý lỗi bền bỉ với Wrap Hooks.
- Trải nghiệm: Xây dựng giao diện mượt mà qua Streaming, Custom Updates và Human-in-the-loop.
- Ký ức: Quản lý bộ nhớ ngắn hạn (Checkpointer) và dài hạn (Store).
- Kiến trúc: Thiết kế hệ thống đa Agent phức tạp (Supervisor & Handoffs).
- Tương lai: Kết nối thế giới dữ liệu thông qua tiêu chuẩn MCP.
Lời khuyên cuối cùng: Lĩnh vực AI Agent đang thay đổi từng giờ. Hãy luôn giữ tinh thần thực hành bằng cách xây dựng những dự án thực tế. Bạn hiện đã sở hữu bộ kỹ năng của một AI Engineer thực thụ. Chúc bạn gặt hái được nhiều thành công trên con đường sắp tới! 🚀