
Model Context Protocol (MCP) là gì? MCP là chuẩn mở, do Anthropic đưa ra, giúp kết nối một trợ lý AI (ví dụ như Claude Desktop) với các nguồn dữ liệu bên ngoài và các công cụ hàm, mà không cần tích hợp mỗi công cụ một cách thủ công riêng lẻ. Điều này giúp các mô hình ngôn ngữ lớn truy cập vào môi trường làm việc thực tế của người dùng một cách thống nhất, mở rộng khả năng sử dụng chúng trong cuộc sống hàng ngày.
Trước khi có MCP, muốn cho Claude biết đọc một file, truy cập cơ sở dữ liệu hoặc gọi một API, nhà phát triển phải viết một bộ nối (adapter) riêng, mỗi công cụ một cách. Khi số lượng công cụ tăng lên, chi phí bảo trì và tích hợp tăng cùng cấp, làm chậm quá trình nâng cấp và mở rộng tính năng. MCP giải quyết vấn đề này bằng cách định hình một giao thức thống nhất, tương tự như cách USB-C cho phép một cổng kết nối với rất nhiều loại thiết bị khác nhau.
Điểm nhấn của MCP là nó hoạt động ở mức abstraction cao: thay vì mô tả chi tiết từng lệnh, nó tập trung vào ba khái niệm chính – công cụ (tool), tài nguyên (resource) và lời gợií (prompt) – qua đó mô hình AI có thể biết mình có thể làm gì và cách gọi chúng một cách an toàn.

Vấn đề mà MCP giải quyết
Các mô hình ngôn ngữ lớn ngày nay rất mạnh về khả năng hiểu và sinh ra văn bản, nhưng chúng hoạt động trong một bao phong kín – chỉ biết những gì được đưa vào qua prompt. Khi muốn chúng làm một số việc thực tế như đọc file, sửa lỗi trong một dự án Git, hoặc truy cập một bảng trong PostgreSQL, mô hình không thể làm gì nếu không có sự can thiệp bên ngoài.
Cách giải pháp truyền thống gồm hai đường:
- Mọi người đều dùng cùng một bộ nối: nhà phát triển viết một plugin cho IDE, mỗi lần có công cụ mới thì phải cập nhật plugin và phải phân phối lại cho mọi người dùng.
- Mỗi người tự viết script riêng: mỗi khi người dùng cần một chức năng mới, họ phải mở terminal, viết một lệnh Bash hoặc Python, rồi sao chép kết quả lại vào cửa sổ chat.
Cả hai cách đều có nhược điểm rõ ràng. Cách đầu tiên làm chậm việc đổi mới vì mọi thay đổi phải qua trung gian. Cách thứ hai thiếu sự thống nhất, khó chia sẻ, và dễ mắc lỗi vì mỗi người viết theo cách riêng của mình.
Ba thành phần chính của MCP
MCP xác định ba loại đối tượng mà mô hình AI có thể tương tác qua một giao diện thống nhất. Mỗi đối tượng được mô tả bằng một schema JSON rõ ràng, giúp mô hình biết chính xác tham số nào cần cung cấp và kiểu trả về nào mong đợi.
1. Công cụ (Tool)
Công cụ là một hàm có thể gọi để thực hiện một hành động cụ thể, chẳng hạn “đọc nội dung file ở đường dẫn X”, “tìm kiếm trong cơ sở dữ liệu với câu truy vấn Y”, hoặc “gửi một yêu cầu HTTP tới endpoint Z”. Mỗi công cụ có:
- Tên: một chuỗi mô tả ngắn gọn, ví dụ
read_filehoặcquery_postgres. - Mô tả: đoạn văn giải thích công cụ làm gì và khi nào nên sử dụng.
- Tham số nhập: một đối tượng JSON Schema cho biết các trường bắt buộc và tùy chọn, cùng với kiểu dữ liệu của mỗi trường.
- Kiểu trả về: mô tả cấu trúc của kết quả mà công cụ sẽ đưa ra sau khi thực hiện xong.
Ví dụ công cụ read_file có thể có schema như sau:
{
"name": "read_file",
"description": "Đọc nội dung của một file văn bản trên hệ thống file local",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Đường dẫn tuyệt đối hoặc tương đối đến file cần đọc"
}
},
"required": ["path"]
}
}
Khi Claude muốn đọc file, nó sẽ tạo ra một lời gọi JSON chứa tên công cụ và tham số, gửi qua kết nối IPC tới MCP server, rồi chờ nhận kết quả lại.
2. Tài nguyên (Resource)
Tài nguyên là một đối tượng dữ liệu có định dạng cố định mà mô hình AI có thể truy cập đọc, ví như một file văn bản, một bản ghi trong cơ sở dữ liệu, hoặc một trang web. Mỗi tài nguyên có:
- URI: một chuỗi xác định duy nhất, ví dụ
file:///home/user/project/README.mdhoặcpostgres://db/public/users. - Mime type: chỉ định kiểu nội dung của tài nguyên (text/plain, application/json, image/png…).
- Nội dung: bytes thực tế của tài nguyên, có thể là văn bản, ảnh hoặc dữ liệu nhị phân.
Tài nguyên cho phép mô hình AI “nhìn thấy” dữ liệu mà không cần phải gọi một hàm. Ví dụ, để tóm tắt một file log, Claude chỉ cần đọc tài nguyên file:///var/log/app.log và tóm tắt nội dung trả về.
3. Lời gợií (Prompt)
Lời gợií là một mẫu đoạn văn có thể chứa các chỗ trống để mô hình AI điền vào. Nó hữu ích khi muốn tạo ra một đoạn văn có cấu trúc cố định nhưng thay đổi một số phần dựa trên bối cảnh. Ví dụ, một lời gợií để viết email có thể là:
Gửi email tới {người nhận} với tiêu đề "{tiêu đề}" và nội dung:
{nội dung}
Khi Claude sử dụng lời gợií này, nó sẽ thay các chỗ trống bằng giá trị thực tế từ context của cuộc trò chuyện, rồi xuất ra tin nhắn cuối cùng.
Kiến trúc MCP trong thực tế
Một hệ thống MCP tiêu chuẩn gồm ba thành phần:
- MCP Host: ứng dụng nơi mô hình AI chạy, ví dụ Claude Desktop hoặc một trình biên dịch tích hợp AI. Host chịu trách nhiệm tạo và duy trì kết nối tới một hoặc nhiều MCP server.
- MCP Server: dịch vụ trung gian cung cấp công cụ, tài nguyên và lời gợií tới host. Một server có thể kết nối với nhiều nguồn dữ liệu khác nhau, như hệ thống file local, cơ sở dữ liệu PostgreSQL, hoặc một API REST bên ngoài.
- Nguồn dữ liệu bên ngoài (Data Source): thực thể cuối cùng cung cấp dữ liệu hoặc thực hiện hành động, ví dụ một file trên đĩa, một bảng trong MySQL, hoặc một điểm cuối API của GitHub.
Kết nối giữa host và server thường dùng các quy chuẩn truyền thống như Unix domain socket, TCP localhost hoặc Named Pipe trên Windows, tất cả đều được bao bọc trong một giao dịch JSON-RPC 2.0 tin cậy.


Lợi ích thực tế của MCP
Với MCP, các kết nối AI trở nên linh hoạt và có thể tái sử dụng hơn rất nhiều:
- Một lần viết, nhiều lần dùng: nhà phát triển chỉ cần viết một MCP server một lần, rồi bất kỳ ứng dụng AI nào hỗ trợ MCP (Claude Desktop, Cursor, các IDE tích hợp AI) đều có thể sử dụng.
- An toàn hơn: vì tất cả các tương tác đều qua server có thể đặt giới hạn, nên mô hình AI không thể truy cập totalité hệ thống mà chỉ được phép dùng những công cụ và tài nguyên mà admin cho phép.
- Dễ debug và theo dõi: giao thức JSON-RPC cho phép ghi lại toàn bộ lịch sử gọi công cụ và tài nguyên, giúp dễ dàng tracback khi có vấn đề.
- Hỗ trợ đa ngôn ngữ: server có thể viết bằng bất kỳ ngôn ngữ nào có thư viện JSON-RPC, từ Python, Go, Rust cho tới Node.js.
Một ví dụ cụ thể là kết nối Claude Desktop với một MCP server cung cấp quyền truy cập vào một kho GitHub riêng. Khi người dùng hỏi “Hãy tóm tắt perubahan gần đây trong kho dự án của tôi”, Claude sẽ:
- Đọc danh sách công cụ từ server và thấy có công cụ
get_recent_commits. - Gọi công cụ đó với tham số
repo: "my-org/my-project"vàsince: "2024-09-01". - Nhận về danh sách commit dưới dạng JSON, sau đó tóm tắt nội dung thành một đoạn văn bản tiếng Việt.
- Trả lời người dùng bằng kết quả vừa thu được.
So sánh với các cách tích hợp truyền thống
| Tiêu chí | MCP | Plugin riêng cho IDE | Script Bash/Python tay |
|---|---|---|---|
| Tái sử dụng giữa các ứng dụng | Có | Không (không gianIDE cụ thể) | Có (nhưng cần chạy terminal) |
| Không cần mở terminal | Có | Có | Không |
| Dễ chia sẻ với nhóm | Có (server một lần) | Không (mỗi IDE một bản) | Không (mỗi người một script) |
| An toàn cho môi trường sản xuất | Có (server có thể giới hạn) | Phụ thuộc vào plugin | Không (script có thể truy cập bất cứ đâu) |
| Hỗ trợ nhiều loại dữ liệu | Có (tool + resource) | Thường chỉ hỗ trợ một loại | Có (nhưng cần viết tay mỗi trường hợp) |
Bắt đầu với MCP
Các bước sau minh họa cách kết nối Claude Desktop với một MCP server đơn giản cung cấp quyền truy cập vào hệ thống file local.
Bước 1: Cài đặt Claude Desktop
Tải bản mới nhất từ trang claude.ai/download và cài đặt như bình thường.
Bước 2: Viết một MCP server đơn giản bằng Python
Tạo một file tên mcp_filesystem.py với nội dung sau:
#!/usr/bin/env python3
import asyncio
import json
import os
from mcp.server import Server
from mcp.types import (
CallToolResult,
ListToolsResult,
Tool,
TextContent,
)
server = Server("filesystem")
@server.list_tools()
async def list_tools() -> ListToolsResult:
return ListToolsResult(
tools=[
Tool(
name="read_file",
description="Đọc nội dung của một file văn bản",
inputSchema={
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Đường dẫn tuyệt đối hoặc tương đối đến file cần đọc"
}
},
"required": ["path"]
}
)
]
)
@server.call_tool()
async def call_tool(name: str, arguments: dict) -> CallToolResult:
if name == "read_file":
path = os.path.abspath(arguments.get("path", ""))
if not os.path.isfile(path):
return CallToolResult(
content=[TextContent(type="text", text=f"File không tồn tại: {path}")],
isError=True
)
try:
with open(path, "r", encoding="utf-8") as f:
content = f.read()
return CallToolResult(
content=[TextContent(type="text", text=content)],
isError=False
)
except Exception as e:
return CallToolResult(
content=[TextContent(type="text", text=f"Lỗi khi đọc file: {str(e)}")],
isError=True
)
else:
return CallToolResult(
content=[TextContent(type="text", text=f"Công cụ không hỗ trợ: {name}")],
isError=True
)
if __name__ == "__main__":
asyncio.run(server.run_stdio_async())
Lưu ý: cần cài đặt gói mcp từ PyPI trước khi chạy:
pip install mcp
Bước 3: Thêm server vào Claude Desktop
- Mở Claude Desktop, đi tới Settings → Developer → MCP Servers.
- Nhấn Add New Server, điền:
- Tên: Filesystem Access
- Loại: Command
- Lệnh:
python3 /path/to/mcp_filesystem.py - Nhấn Save và khởi động lại Claude Desktop nếu cần.
Bước 4: Sử dụng trong trò chuyện
Sau khi kết nối thành công, bạn có thể hỏi Claude:
Hãy đọc file /etc/hostname và nói tên máy là gì.
Claude sẽ:
- Xem danh sách công cụ và thấy có
read_file. - Gọi công cụ với tham số
{"path": "/etc/hostname"}qua kết nối IPC tới MCP server. - Nhận về nội dung file dưới dạng chuỗi văn bản.
- Trả lời bằng nội dung vừa đọc được.
Kết luận
Model Context Protocol mở ra một thời đại mới trong cách chúng ta tương tác với AI. Thay vì buộc mỗi ứng dụng AI phải tự mình hiểu và tích hợp từng công cụ một cách thủ công, MCP đưa ra một lớp trung gian thống nhất, cho phép mô hình ngôn ngữ lớn truy cập vào thế giới thực tế một cách có kiểm soát, an toàn và dễ mở rộng.
Đối với nhà phát triển, đây là cơ hội để xây dựng một lần và phục vụ cho hàng triệu người dùng AI. Đối với người dùng cuối, nghĩa là trợ lý AI của họ sẽ ngày càng trở nên hữu ích hơn khi chúng có thể đọc email, truy cập lịch, thao tác với mã nguồn, hoặc thậm chí kiểm soát thiết bị nhà thông minh – mọi thứ chỉ cần một lời gọi công cụ đơn giản qua MCP.
Trong thời gian tới, khi MCP được rộng rãi chấp nhận trong cộng đồng AI, chúng ta có thể mong đợi một hệ sinh thái nơi bất cứ đâu bạn thấy một trợ lý AI, cũng sẽ thấy một MCP server chạy ngầm bên dưới, làm việc như một cầu nối giữa trí tuệ nhân tạo và thế giới thực.
Tài liệu tham khảo
- Tài liệu chính thức của Model Context Protocol: modelcontextprotocol.io
- Kho mã nguồn MCP trên GitHub: github.com/modelcontextprotocol
- Hướng dẫn kết nối với Claude Desktop: modelcontextprotocol.io/docs/quickstart/claude-desktop
- Ví dụ MCP server cho hệ thống file: github.com/modelcontextprotocol/python-server
