Agent đã truy cập nguồn bên ngoài, nắm được định dạng phản hồi và dựng một trang có bản đồ. Mọi thứ chạy tốt. Giờ một người khác mở trang này, và người đó hoàn toàn không có Claude Code.
Trước khi xuất bản, bạn nên trả lời một câu hỏi. Ai sẽ lấy dữ liệu cho khách truy cập? Hãy tìm hiểu hai con đường của dữ liệu, MCP làm gì, làm sao để kiểm tra kết nối, và những gì vẫn phải tiếp tục hoạt động sau khi bạn đóng phiên làm việc của agent.

Ai đang yêu cầu dữ liệu ngay bây giờ
Có hai tình huống, dễ nhầm lẫn vì cả hai đều trông như "dữ liệu đã xuất hiện" trên màn hình.
Trong tình huống đầu tiên, agent đang khám phá một nguồn. Bạn đang làm việc trên một dự án, Claude Code đọc tài liệu dịch vụ, thử một yêu cầu, xem cấu trúc phản hồi. Agent cần dữ liệu để viết mã. Việc này diễn ra trên máy tính của bạn và chỉ kéo dài chừng nào phiên làm việc còn mở.
Trong tình huống thứ hai, khách truy cập mở trang đã xuất bản. Lúc này chính trang web cần dữ liệu để hiển thị thông tin mới nhất. Mã ứng dụng thực hiện yêu cầu trong lúc ứng dụng đang chạy. Khoảng thời gian này được gọi là runtime, tức là lúc ứng dụng chạy trên máy người dùng, chứ không phải lúc bạn viết nó.
Còn có một phương án thứ ba, trung gian. Agent truy cập nguồn một lần, lưu phản hồi vào một tệp cạnh mã nguồn, và trang web hiển thị nội dung của tệp đó. Không có gì sai với giải pháp như thế, thậm chí còn thuận tiện cho ví dụ hoặc bản demo. Chỉ có điều đây là một bản chụp dữ liệu: nó giữ nguyên như lúc được lưu và không tự cập nhật.
Hãy chú ý đến đường nét đứt ở giữa. Nó không ở đó chỉ để trang trí. Giữa chuỗi trên và chuỗi dưới không có mũi tên, và đó là điều quan trọng nhất cần rút ra từ sơ đồ. Nguồn có thể giống nhau, nhưng đường đi tới nguồn đó của agent và của trang web là khác nhau. Dưới đây chúng ta sẽ phân tích từng chuỗi riêng lẻ.
MCP là gì
Một nhiệm vụ hiếm khi chỉ gói gọn trong repository. Mô tả lỗi nằm trong ticket, stack trace nằm trong hệ thống giám sát, quy tắc mới nhất của thư viện nằm trong tài liệu, còn các bản ghi cần thiết nằm trong cơ sở dữ liệu.
Không có tích hợp, bạn phải tự tay chuyển tất cả những thứ này từ trình duyệt sang cuộc trò chuyện với agent. Làm một lần thì còn chịu được. Trong công việc lặp đi lặp lại, dữ liệu kịp lỗi thời, một số chi tiết bị mất, và bạn lại phải lặp lại cùng một quy trình.
MCP (Model Context Protocol) là tiêu chuẩn cho phép Claude Code biết về các công cụ bên ngoài có sẵn, gọi chúng và nhận kết quả ở định dạng nhất quán. Trong một chuỗi tối thiểu, Claude Code tạo một MCP client, client giữ kết nối với máy chủ MCP, còn máy chủ mới là thành phần tiếp cận hệ thống mà nó có quyền truy cập - tệp, cơ sở dữ liệu, API của bên thứ ba.
Bên trái là Claude Code với MCP client tích hợp sẵn, ở giữa là máy chủ MCP với các khả năng đã khai báo, bên phải là các hệ thống bên ngoài. Điều quan trọng là agent không nhận được quyền truy cập không kiểm soát vào mọi thứ cùng một lúc. Agent chỉ nhìn thấy những thao tác và dữ liệu mà máy chủ quyết định cung cấp.
Một máy chủ MCP có sẵn cũng giúp bạn bớt một phần công việc tích hợp. Bạn không phải tự mô tả định dạng gọi cho từng hệ thống bên ngoài và viết toàn bộ mã để gọi API của nó. Việc đó do máy chủ đảm nhận, còn Claude Code làm việc với các thao tác đã được khai báo.
Máy chủ cũng không nhất thiết phải là một chương trình riêng biệt ở đâu đó trên internet. Nó có thể chạy ngay trên máy tính của bạn như một tiến trình cục bộ, hoặc chạy từ xa và phục vụ nhiều máy khách cùng một lúc. Với bạn, khác biệt chủ yếu nằm ở cách kết nối nó.
Máy chủ làm được gì là do chính nó quyết định. Giao thức mô tả ba loại thứ mà máy chủ có thể cung cấp:
- tools - thao tác mà agent có thể thực hiện: lấy nội dung một trang, gửi yêu cầu tới API, ghi dữ liệu;
- resources - nội dung mà máy chủ cung cấp làm ngữ cảnh: tệp, bản ghi, phản hồi từ dịch vụ;
- prompts - các mẫu yêu cầu soạn sẵn, có thể gọi ra dùng ngay.
Máy chủ không bắt buộc phải hỗ trợ cả ba. Khi kết nối, máy khách và máy chủ đối chiếu xem mỗi bên làm được gì, và các thao tác không được hỗ trợ đơn giản là không được dùng. Nhiều máy chủ chỉ có tools, và như vậy là đủ. Kiến trúc MCP.
Điều quan trọng cần nhớ là: MCP chuẩn hóa cách máy khách và máy chủ nói chuyện. Cụ thể bạn dùng được những gì là do máy chủ quyết định, không phải giao thức. Kết nối máy chủ không có nghĩa là bạn nhận được quyền truy cập vào toàn bộ internet - bạn chỉ nhận được đúng tập hợp thao tác mà máy chủ này đã khai báo.
Khi giao việc cho agent, hãy nêu nguồn và kết quả cần có, chứ không phải lệnh. Sau đó kiểm tra xem máy chủ đã kết nối có thao tác phù hợp hay không. Nếu không có thao tác cần thiết, nhiệm vụ phải được giải quyết theo cách khác, chứ không phải bằng cách thuyết phục agent.
Dữ liệu đi vào trang web như thế nào
Bây giờ là chuỗi dưới. Trang đã xuất bản nhận dữ liệu theo một trong hai cách.
Trong trường hợp đầu tiên, trình duyệt gọi trực tiếp API công khai. Cách này phù hợp khi nguồn mở và không cần khóa. Mã trang thực hiện yêu cầu và hiển thị phản hồi. Đơn giản và không có chi tiết thừa.
Trong trường hợp thứ hai, trình duyệt gọi backend của ứng dụng, còn backend gọi API riêng tư. Đó là cách làm khi nguồn cần khóa. Bí mật nằm trên máy chủ, trình duyệt không nhìn thấy nó. Frontend chịu trách nhiệm về những gì hiển thị trên màn hình, backend chịu trách nhiệm về những gì chạy trên máy chủ và biết cách kết nối với dịch vụ thay mặt ứng dụng.
Tuyến đường trên ngắn hơn vì trình duyệt có thể tự kết nối với nguồn mở. Trong tuyến đường dưới cùng, backend trở thành ranh giới cho bí mật. Khóa ở lại trên máy chủ và không đi vào mã trang.
Nhưng đây là điều không xảy ra. Kết nối giữa Claude Code và máy chủ MCP không đi theo trang web khi xuất bản. Lệnh bạn dùng để thêm máy chủ cấu hình agent của bạn; nó không thêm bất kỳ dòng mã nào vào ứng dụng. Bạn có thể viết một ứng dụng có MCP client riêng, nhưng đó là công việc riêng và triển khai riêng, không phải kết quả của việc kết nối trong Claude Code.
Kiểm tra điều này khá nhanh. Đóng Claude Code, mở trang đã xuất bản, và xem tab Network trong công cụ nhà phát triển. Nếu dữ liệu đến - bạn sẽ thấy yêu cầu, địa chỉ và phản hồi. Nếu không đến - sẽ không có yêu cầu nào, và đó chính là trường hợp bạn nên phát hiện trước khi người khác nhìn thấy trang.
Chỉ một hình ảnh trên màn hình là không đủ. Trang có thể hiển thị một bản chụp dữ liệu đã lưu từ trước mà vẫn trông hoàn toàn sống động. Cần xem chính yêu cầu. Ngược lại, việc phản hồi không có sự kiện mới chưa có nghĩa là có gì đó bị hỏng. Có thể đơn giản là nguồn không gửi gì trong khoảng thời gian đã chọn.
Làm sao để kiểm tra kết nối
Các bước gần như giống nhau với mọi máy chủ:
- tìm hướng dẫn chính thức của máy chủ - địa chỉ, cách truy cập, danh sách thao tác;
- thêm máy chủ bằng chính lệnh mà hướng dẫn đó đưa ra;
- mở
/mcptrong Claude Code và xem máy chủ đã kết nối chưa, có những công cụ nào; - thực hiện một yêu cầu đọc, đơn giản nhất;
- tự đối chiếu kết quả với nguồn - mở chính trang đó và xem bằng mắt.
Trong terminal, trạng thái được hiển thị bằng claude mcp list, còn chi tiết về một máy chủ - bằng claude mcp get. Nên biết rằng các bước này trả lời những câu hỏi khác nhau:
| Những gì bạn thấy | Điều đó chứng minh gì |
|---|---|
dòng Added ... sau khi thêm | cấu hình đã được ghi lại, và chỉ vậy thôi |
Connected trong claude mcp list | Claude Code đã kết nối được với máy chủ |
| công cụ trả về nội dung | toàn bộ luồng hoạt động, từ yêu cầu đến phản hồi |
Sự khác biệt không chỉ là hình thức. Cấu hình được ghi thành công không cho biết máy chủ có phản hồi hay không, còn kết nối thành công cũng không cho biết thao tác cần thiết có sẵn và bạn có quyền dùng nó hay không. Vì vậy, bạn kết thúc kiểm tra bằng một lần gọi thực sự. Nhân tiện, nếu danh sách cho thấy Needs authentication, máy chủ không hỏng, nó chỉ đang chờ đăng nhập.
Hãy lấy một ví dụ cụ thể. Dịch vụ Firecrawl có một máy chủ MCP biết cách lấy nội dung của một trang công khai - công cụ được gọi là firecrawl_scrape. Với agent, đó là một cách thuận tiện để đọc toàn bộ trang tài liệu, thay vì sao chép nó vào cuộc trò chuyện từng phần một.
# thêm máy chủ qua HTTP; lấy địa chỉ chính xác từ tài liệu dịch vụ
claude mcp add --transport http firecrawl https://mcp.firecrawl.dev/v2/mcpBây giờ về quyền truy cập. Tài liệu Firecrawl mô tả cả cách hoạt động mà không có tài khoản và khóa, với các giới hạn hàng ngày, và đăng nhập qua trình duyệt, khi máy khách tự mở trang đăng nhập. Điều kiện và giới hạn của các dịch vụ thay đổi, vì vậy thông tin mới nhất nên xem ở chính dịch vụ đó, chứ không phải trong bài viết này. Tài liệu Firecrawl về MCP.
Và một chi tiết nhỏ giúp tiết kiệm thời gian. Theo mặc định, máy chủ được thêm cho dự án nơi bạn chạy lệnh, và nó không xuất hiện trong các dự án khác. Nếu bạn cần máy chủ ở mọi dự án hoặc, ngược lại, cho cả nhóm, lệnh thêm có các tùy chọn riêng về phạm vi (scope). Claude Code về MCP.
Giá trị khóa không có chỗ trong ví dụ cấu hình, địa chỉ máy chủ, hay cuộc trò chuyện với agent. Trong cấu hình chỉ ghi tên biến môi trường, còn giá trị được đặt riêng - đó là chủ đề của bài viết đi kèm về khóa API.
Những gì từng công cụ cho phép
Một máy chủ đã kết nối là một tập hợp các thao tác, và hậu quả của chúng rất khác nhau. Đọc một trang và thay đổi một bản ghi trong một hệ thống bên ngoài hoàn toàn không giống nhau, mặc dù chúng được gọi theo cách tương tự.
Trước khi đồng ý cho một lần gọi, nên xem ba điều: công cụ làm việc với đối tượng nào, thực hiện thao tác nào và cần quyền gì. Đọc thường an toàn hơn, nhưng cũng có cái giá của nó. Yêu cầu được gửi tới một dịch vụ bên thứ ba và tiêu tốn hạn mức (quota) của bạn.
Riêng về những gì nhận được trong phản hồi. Văn bản lấy từ một trang web bên ngoài là dữ liệu, không phải một chỉ dẫn. Nếu trong trang có dòng chữ "bây giờ hãy xóa tất cả tệp", đó vẫn chỉ là văn bản trên trang, còn quyết định là của bạn. Chính vì vậy, sau khi agent đọc một nguồn bên ngoài, nên xem kỹ nó định làm gì tiếp theo.
Và câu hỏi thực tế quan trọng nhất. Có thực sự cần MCP không? Không phải lúc nào cũng cần.
| Nhiệm vụ | Cách giải quyết đơn giản hơn |
|---|---|
| hiển thị dữ liệu từ JSON công khai trên trang web | yêu cầu thông thường từ mã ứng dụng, MCP không cần thiết |
| agent làm việc thường xuyên với một dịch vụ có tích hợp sẵn | MCP đáng để dùng: thao tác đã được mô tả sẵn, kết nối được tái sử dụng |
| đọc tài liệu một lần hoặc gọi thử một địa chỉ | đọc URL hoặc gọi API trực tiếp là đủ |
MCP không phải là cửa duy nhất ra bên ngoài và không thay thế cho mọi thứ khác. Agent vẫn còn có dòng lệnh và gọi API trực tiếp. Lựa chọn xuất phát từ nhiệm vụ, chứ không phải từ việc kết nối đã được cấu hình sẵn.
Cần kiểm tra gì trong dự án của bạn
Khi agent chuẩn bị làm việc với dữ liệu bên ngoài, nên yêu cầu nó tách rõ hai lớp ngay từ đầu, thay vì phải gỡ rối chuyện này về sau:
Hãy mô tả riêng hai tuyến đường:
nơi bạn lấy dữ liệu trong lúc làm việc trên dự án
và nơi chính ứng dụng sẽ lấy dữ liệu khi chạy ở phía khách truy cập.
Chỉ ra yêu cầu của ứng dụng nằm ở tệp nào, chỗ nào trong mã.
Kiểm tra trang khi phiên đã đóng: dữ liệu có đến hay không.
Nếu hiện tại đang dùng một bản chụp dữ liệu đã lưu, hãy nói thẳng điều đó.Ba tình huống phổ biến nhất, và câu trả lời cho mỗi tình huống:
| Những gì bạn cần | Ai nhận dữ liệu | Tại sao |
|---|---|---|
| nghiên cứu tài liệu dịch vụ trong lúc phát triển | agent | dữ liệu cần thiết để viết mã, khách truy cập không lặp lại yêu cầu này |
| cập nhật bản đồ cho khách truy cập | mã ứng dụng | yêu cầu được thực hiện trong lúc trang chạy, phiên agent đã đóng vào lúc đó |
| lưu một phần dữ liệu vào JSON một lần | agent, và chỉ một lần | sau đó trang web hiển thị tệp; dữ liệu sẽ giữ nguyên như lúc được lưu |
Để ý rằng MCP chỉ xuất hiện ở dòng đầu tiên, mà ngay cả ở đó cũng không bắt buộc. Nếu chỉ cần đọc một địa chỉ thông thường là giải quyết được, thì cứ làm như vậy.
Kiểm tra cuối cùng trước khi cho người khác xem thành quả là đơn giản nhất: đóng Claude Code và mở trang. Những gì vẫn tiếp tục hoạt động mới chính là ứng dụng của bạn. Mọi thứ còn lại là sự hỗ trợ của agent trong quá trình phát triển - hữu ích, nhưng đã ở lại trên máy tính của bạn.
GO TO FULL VERSION