AI Agent với MCP: Tích hợp LLM và Tools bằng Python
LLM có thể giải thích kiến thức, phân tích câu hỏi và tạo nội dung, nhưng bản thân mô hình không tự động truy cập được mọi cơ sở dữ liệu, API hay hệ thống nội bộ. Muốn thực hiện những công việc đó, ứng dụng cần cung cấp cho mô hình các công cụ phù hợp và một cơ chế thực thi an toàn.
Đây là lúc AI Agent và Model Context Protocol (MCP) phát huy vai trò. Khi kết hợp đúng cách, LLM có thể lựa chọn công cụ cần sử dụng, gửi yêu cầu đến ứng dụng, nhận kết quả rồi tiếp tục suy luận để hoàn thành nhiệm vụ.
Trong bài viết này, chúng ta sẽ tìm hiểu kiến trúc AI Agent sử dụng MCP, quy trình tool calling, cách kết nối bằng Python và những lưu ý quan trọng khi triển khai thực tế.
1. AI Agent với MCP là gì?
AI Agent với MCP là một ứng dụng AI kết hợp mô hình ngôn ngữ lớn (LLM), logic điều phối của agent và các công cụ được cung cấp thông qua Model Context Protocol. Kiến trúc này giúp ứng dụng AI làm việc với những hệ thống bên ngoài theo một giao thức thống nhất.
Ví dụ, người dùng hỏi: “Hãy tìm các khóa học Python phù hợp cho người mới bắt đầu và tóm tắt nội dung chính.” Ứng dụng có thể cần:
- Hiểu yêu cầu của người dùng.
- Chọn công cụ tìm kiếm khóa học phù hợp.
- Gửi tham số tìm kiếm đến MCP Server.
- Nhận danh sách khóa học từ hệ thống.
- Đưa kết quả trở lại LLM để tổng hợp câu trả lời.
Điểm quan trọng là LLM đề xuất việc gọi công cụ, còn ứng dụng chịu trách nhiệm kiểm tra và thực thi yêu cầu. MCP chuẩn hóa cách ứng dụng khám phá và gọi các công cụ được MCP Server cung cấp.
2. Phân biệt LLM, AI Agent, MCP Client và MCP Server
| Thành phần | Vai trò | Ví dụ |
|---|---|---|
| LLM | Hiểu yêu cầu, lựa chọn hành động phù hợp và tạo câu trả lời. | Mô hình nhận ra rằng cần tìm kiếm khóa học. |
| AI Agent / Host | Điều phối luồng xử lý, quản lý trạng thái và kiểm soát việc thực thi công cụ. | Ứng dụng Python điều khiển vòng lặp tool calling. |
| MCP Client | Kết nối với MCP Server, khám phá tools và gửi yêu cầu gọi tool. | Client gọi công cụ search_courses. |
| MCP Server | Cung cấp công cụ và thực thi logic tương ứng. | Truy vấn danh mục khóa học và trả về dữ liệu. |
Các thành phần này có thể được tổ chức trong một ứng dụng hoặc nhiều tiến trình khác nhau. MCP không thay thế LLM và cũng không tự quyết định công cụ nào phù hợp. Việc lựa chọn thường được thực hiện bởi LLM hoặc logic điều phối của agent dựa trên các tool mà ứng dụng cung cấp.
3. Kiến trúc hoạt động của AI Agent sử dụng MCP
Một luồng xử lý cơ bản có thể mô tả như sau:
- Người dùng gửi yêu cầu đến ứng dụng AI.
- Ứng dụng gửi yêu cầu cùng mô tả các tools khả dụng đến LLM.
- LLM trả về câu trả lời trực tiếp hoặc đề xuất gọi một hay nhiều tools.
- Ứng dụng kiểm tra tên tool, tham số và quyền thực thi.
- MCP Client gửi yêu cầu đến MCP Server tương ứng.
- MCP Server thực hiện công việc và trả về kết quả.
- Ứng dụng chuyển kết quả của tool lại cho LLM.
- LLM tạo câu trả lời cuối cùng hoặc yêu cầu gọi thêm tool nếu cần.
Quy trình này thường được gọi là tool-calling loop. Một nhiệm vụ có thể cần nhiều lượt gọi công cụ trước khi hoàn thành.
Lưu ý: Không phải mọi câu hỏi đều cần gọi tool. Với câu hỏi kiến thức thông thường, LLM có thể trả lời trực tiếp. Với câu hỏi cần dữ liệu mới hoặc hành động từ hệ thống bên ngoài, agent có thể chọn công cụ phù hợp.
4. Chuẩn bị môi trường Python
Để thực hành, bạn cần có Python tương thích với phiên bản SDK đang sử dụng, một MCP Server đã cung cấp ít nhất một tool và thông tin cấu hình của nhà cung cấp LLM. Hãy kiểm tra yêu cầu phiên bản tại tài liệu chính thức trước khi cài đặt.
Cài MCP Python SDK:
pip install "mcp[cli]"
Nếu sử dụng API của nhà cung cấp LLM, hãy cài thêm SDK tương ứng theo tài liệu chính thức của nhà cung cấp đó. Không đặt API key trực tiếp trong mã nguồn được chia sẻ hoặc đưa lên GitHub.
Tài liệu tham khảo:
5. Khám phá tools từ MCP Server
Trước khi LLM có thể đề xuất gọi một tool, ứng dụng cần biết tool đó làm gì và yêu cầu những tham số nào. MCP Client có thể lấy thông tin này thông qua phương thức list_tools().
Ví dụ dưới đây minh họa cách kết nối tới một MCP Server qua HTTP và in ra mô tả các tools. Địa chỉ server phải được thay bằng endpoint MCP thực tế của bạn.
import asyncio
from mcp import Client
async def main():
async with Client("http://localhost:8000/mcp") as client:
result = await client.list_tools()
for tool in result.tools:
print("Name:", tool.name)
print("Description:", tool.description)
print("Input schema:", tool.input_schema)
if __name__ == "__main__":
asyncio.run(main())
Đoạn mã này chỉ thực hiện khám phá tools. Nó chưa gọi LLM và chưa tạo ra một AI Agent hoàn chỉnh. Nếu MCP Server của bạn sử dụng STDIO hoặc một transport khác, hãy cấu hình MCP Client theo đúng loại transport đó.
6. Để LLM lựa chọn và gọi tools như thế nào?
LLM thường không trực tiếp chạy hàm Python hoặc tự kết nối tới MCP Server. Thay vào đó, ứng dụng cung cấp cho mô hình danh sách công cụ với tên, mô tả và schema tham số. Mô hình có thể trả về một yêu cầu gọi tool theo định dạng mà API hỗ trợ.
Ví dụ, ứng dụng có tool:
{
"name": "search_courses",
"description": "Tìm khóa học theo từ khóa.",
"parameters": {
"keyword": "string"
}
}
Khi người dùng yêu cầu tìm khóa học Python, LLM có thể đề xuất một lần gọi tương tự:
{
"name": "search_courses",
"arguments": {
"keyword": "Python"
}
}
Đây là ví dụ minh họa đơn giản hóa, không phải schema chuẩn của một API cụ thể. Trong triển khai thật, cần sử dụng đúng JSON Schema và cấu trúc tool-call của nhà cung cấp LLM.
Ứng dụng nhận yêu cầu này, kiểm tra tính hợp lệ rồi ánh xạ tool được chọn sang MCP Client. Client mới là thành phần gửi lệnh gọi tới MCP Server.
7. Mã giả Python cho vòng lặp AI Agent với MCP
Vì mỗi nhà cung cấp LLM có API và định dạng tool calling riêng, đoạn mã dưới đây mô tả logic điều phối ở mức khái niệm. Các hàm ask_llm() và convert_mcp_tools() cần được triển khai theo SDK của nhà cung cấp bạn chọn; chúng không phải hàm có sẵn trong MCP Python SDK.
async def run_agent(user_message, mcp_client):
tools = await mcp_client.list_tools()
model_tools = convert_mcp_tools(tools)
messages = [
{"role": "user", "content": user_message}
]
for _ in range(5):
response = await ask_llm(
messages=messages,
tools=model_tools
)
if not response.tool_calls:
return response.text
messages.append(response.assistant_message)
for call in response.tool_calls:
validate_tool_name(call.name, tools)
validate_arguments(call.name, call.arguments, tools)
result = await mcp_client.call_tool(
call.name,
call.arguments
)
messages.append(
make_tool_result_message(call, result)
)
return "Đã đạt giới hạn số lượt gọi công cụ."
Đoạn mã là khung thiết kế, không thể chạy nguyên trạng nếu chưa xây dựng các hàm chuyển đổi và adapter cho LLM. Trong ứng dụng thực tế, cần giữ đúng định dạng hội thoại mà API yêu cầu, liên kết kết quả với đúng tool call và xử lý cả trường hợp công cụ lỗi hoặc mô hình trả về nhiều tool calls.
Giải thích các bước chính
list_tools(): lấy danh sách công cụ từ MCP Server.convert_mcp_tools(): chuyển mô tả và schema của MCP sang định dạng tool mà API LLM yêu cầu.ask_llm(): gửi lịch sử hội thoại và danh sách tools đến mô hình.validate_tool_name(): chỉ cho phép gọi những tools đã được ứng dụng cho phép.validate_arguments(): kiểm tra tham số trước khi thực thi.call_tool(): gọi tool qua MCP Client.make_tool_result_message(): chuyển kết quả về định dạng mà LLM có thể tiếp tục xử lý.
Giới hạn số vòng lặp giúp tránh agent gọi công cụ vô hạn. Khi triển khai, bạn cũng nên đặt timeout, giới hạn kích thước kết quả và cơ chế xử lý lỗi.
8. Ví dụ thực tế: AI Agent tra cứu khóa học
Giả sử một hệ thống đào tạo có MCP Server cung cấp tool search_courses. Người dùng hỏi: “Tìm các khóa học Python dành cho người mới và tóm tắt điểm khác biệt.”
Luồng xử lý có thể diễn ra như sau:
- LLM xác định rằng cần dữ liệu từ danh mục khóa học.
- LLM đề xuất gọi
search_coursesvới từ khóa phù hợp. - Ứng dụng xác nhận tool và tham số hợp lệ.
- MCP Client gửi yêu cầu tới MCP Server.
- MCP Server trả về danh sách khóa học và các thông tin liên quan.
- Ứng dụng gửi kết quả cho LLM.
- LLM so sánh và trình bày câu trả lời dựa trên dữ liệu vừa nhận.
Nếu người dùng tiếp tục hỏi về một khóa học cụ thể, agent có thể gọi thêm tool chi tiết khóa học — nếu công cụ đó đã được cung cấp và được phép sử dụng.
Điều cần nhớ là LLM chỉ nên trình bày những thông tin được kết quả công cụ hỗ trợ. Nếu MCP Server không trả về học phí hoặc lịch học, ứng dụng không nên để mô hình tự suy đoán những thông tin đó.
9. Những lỗi thường gặp khi tích hợp MCP với AI Agent
LLM gọi sai tool
Nguyên nhân có thể là tên tool thiếu rõ ràng, mô tả mơ hồ hoặc có quá nhiều công cụ tương tự. Hãy đặt tên dễ hiểu, mô tả chính xác mục đích và chỉ cung cấp những tools liên quan đến nhiệm vụ hiện tại.
Tham số đầu vào không hợp lệ
Không nên tin tưởng tuyệt đối vào tham số do mô hình tạo ra. Hãy kiểm tra schema, kiểu dữ liệu, giá trị cho phép và quyền truy cập trước khi gọi tool.
Kết quả tool không đúng định dạng
Ứng dụng cần chuyển kết quả MCP thành định dạng tương thích với API LLM. Không nên giả định mọi tool đều trả về một chuỗi văn bản đơn giản.
Agent lặp lại việc gọi công cụ
Hãy đặt giới hạn số lượt gọi, timeout và điều kiện dừng. Nếu công cụ thất bại, agent nên nhận được thông báo lỗi rõ ràng thay vì tiếp tục lặp lại không giới hạn.
Thực thi hành động có rủi ro mà không kiểm tra
Với các thao tác như gửi email, sửa dữ liệu, xóa bản ghi hoặc thực hiện giao dịch, cần có kiểm tra quyền và bước xác nhận phù hợp. Không để mô hình tự quyết định quyền truy cập chỉ dựa trên nội dung yêu cầu.
10. Nguyên tắc bảo mật khi xây dựng AI Agent
- Chỉ công khai những tools cần thiết cho nhiệm vụ.
- Xác thực và phân quyền tại ứng dụng hoặc MCP Server.
- Kiểm tra mọi tham số do LLM tạo ra trước khi thực thi.
- Không đưa API key, mật khẩu hoặc thông tin nhạy cảm vào prompt không cần thiết.
- Giới hạn thời gian chạy, số lần gọi và lượng dữ liệu trả về.
- Ghi log các lần gọi công cụ để hỗ trợ kiểm tra và xử lý sự cố, nhưng tránh lưu dữ liệu nhạy cảm không cần thiết.
- Yêu cầu người dùng xác nhận trước các hành động quan trọng hoặc khó đảo ngược.
- Đánh giá agent bằng các tình huống thực tế, bao gồm cả đầu vào sai và yêu cầu vượt quyền.
11. Khi nào nên dùng AI Agent kết hợp MCP?
| Tình huống | Cách tiếp cận phù hợp |
|---|---|
| Hỏi đáp kiến thức phổ thông, không cần dữ liệu ngoài | LLM có thể trả lời trực tiếp. |
| Ứng dụng cần truy cập nhiều hệ thống cung cấp tools | Cân nhắc MCP để chuẩn hóa kết nối. |
| Quy trình có bước xử lý cố định, ít thay đổi | Code thông thường hoặc workflow xác định trước có thể đơn giản và dễ kiểm soát hơn. |
| Nhiệm vụ cần chọn công cụ theo ngữ cảnh và xử lý kết quả nhiều bước | AI Agent có tool calling và cơ chế điều phối phù hợp. |
| Hành động có tác động lớn hoặc cần phê duyệt | Kết hợp agent với phân quyền, xác nhận và kiểm soát ở phía ứng dụng. |
MCP không tự động làm hệ thống thông minh hơn. Giá trị của MCP nằm ở khả năng chuẩn hóa cách kết nối với các công cụ; chất lượng của agent vẫn phụ thuộc vào mô hình, thiết kế tools, dữ liệu, logic điều phối và cơ chế kiểm soát.
12. Kết luận
Khi tích hợp MCP vào AI Agent, LLM có thể lựa chọn công cụ dựa trên yêu cầu của người dùng, còn ứng dụng Python điều phối việc thực thi thông qua MCP Client và MCP Server. Kết quả được đưa trở lại mô hình để tiếp tục xử lý và tạo câu trả lời.
Để xây dựng hệ thống đáng tin cậy, hãy bắt đầu với một MCP Server và một vài tools có phạm vi rõ ràng. Sau đó hoàn thiện vòng lặp tool calling, kiểm tra tham số, xử lý lỗi, giới hạn số lượt thực thi và bổ sung cơ chế xác nhận cho những hành động nhạy cảm.
Nếu muốn mở rộng kiến thức về Python, AI và phân tích dữ liệu, bạn có thể tham khảo các chương trình học tại MCNA Technology School:
Tài liệu tham khảo:

