Claude Certification Guide
0% chương trình học đã hoàn thành
2.4

Tích hợp MCP Server

Những điều bạn cần biết

MCP server (Model Context Protocol) mở rộng năng lực của Claude bằng cách kết nối nó với các hệ thống bên ngoài — cơ sở dữ liệu, API, công cụ phát triển, hệ thống theo dõi issue. Cấu hình chúng đúng cách sẽ quyết định liệu nhóm của bạn có dùng chung một bộ công cụ nhất quán hay rơi vào tình trạng hỗn loạn cấu hình.

Hệ thống phân cấp phạm vi

Cấu hình MCP server tồn tại ở hai cấp độ, và việc nhầm lẫn giữa chúng là nguồn gốc phổ biến của nhiều vấn đề.

Cấp dự án: .mcp.json Nằm ở gốc kho mã của dự án. Được quản lý phiên bản (version-controlled). Được chia sẻ với mọi thành viên trong nhóm khi họ clone hoặc pull kho mã. Dùng cấu hình này cho các server mà toàn bộ nhóm cần — tích hợp Jira, các tool GitHub, các connector API nội bộ của bạn.

jsonCopy

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "jira": {
      "command": "npx",
      "args": ["-y", "@community/mcp-server-jira"],
      "env": {
        "JIRA_URL": "${JIRA_URL}",
        "JIRA_TOKEN": "${JIRA_TOKEN}"
      }
    }
  }
}

Cấp người dùng: ~/.claude.json Nằm trong thư mục home của người dùng. Mang tính cá nhân. KHÔNG được quản lý phiên bản. KHÔNG được chia sẻ với đồng nghiệp. Dùng cấu hình này cho các server thử nghiệm, tích hợp cá nhân, hoặc các server bạn đang thử nghiệm trước khi đề xuất cho cả nhóm.

Nguyên tắc cốt lõi: tất cả tool từ mọi server đã cấu hình (cả cấp dự án và cấp người dùng) đều được phát hiện tại thời điểm kết nối và sẵn sàng sử dụng cùng lúc. Không có bước kích hoạt thủ công nào cả — nếu một server đã được cấu hình và có thể truy cập được, các tool của nó sẽ xuất hiện trong bộ công cụ của agent.

Mở rộng biến môi trường

File .mcp.json hỗ trợ cú pháp ${VARIABLE_NAME} để mở rộng biến môi trường. Đây là cách bạn giữ thông tin xác thực (credentials) ngoài phạm vi quản lý phiên bản trong khi vẫn chia sẻ cấu hình server với nhóm của mình.

jsonCopy

{
  "env": {
    "GITHUB_TOKEN": "${GITHUB_TOKEN}",
    "DATABASE_URL": "${DATABASE_URL}"
  }
}

Mỗi lập trình viên tự thiết lập token của riêng mình cục bộ (trong shell profile, file .env, hoặc trình quản lý secret). File .mcp.json chỉ tham chiếu tên biến, không chứa giá trị thật. Điều này có nghĩa là:

  • File cấu hình an toàn để commit vào quản lý phiên bản
  • Mỗi lập trình viên xác thực bằng thông tin đăng nhập của riêng mình
  • Việc xoay vòng token không đòi hỏi thay đổi file cấu hình
  • Không có secret nào bị lộ qua lịch sử kho mã

Resource của MCP

Resource của MCP là một cơ chế để hiển thị các danh mục nội dung cho agent mà không cần các lệnh gọi tool mang tính thăm dò. Thay vì agent phải gọi tool để khám phá dữ liệu nào đang có sẵn, resource trình bày thông tin đó ngay từ đầu.

Ví dụ về những gì nên hiển thị dưới dạng resource:

  • Tóm tắt issue — danh sách các issue Jira hiện tại kèm tiêu đề và trạng thái
  • Cây phân cấp tài liệu — mục lục cho tài liệu nội bộ của bạn
  • Schema cơ sở dữ liệu — tên bảng, kiểu cột, và các mối quan hệ

Lợi ích là giảm số truy vấn không cần thiết. Nếu không có resource, một agent có thể phải gọi list_tables, rồi describe_table cho từng bảng, tiêu tốn nhiều lệnh gọi tool chỉ để hiểu bối cảnh dữ liệu. Với một resource schema cơ sở dữ liệu, thông tin đó có sẵn ngay lập tức.

Resource cho agent khả năng nhìn thấy dữ liệu sẵn có. Tool cho phép agent hành động trên dữ liệu đó. Sự kết hợp này có nghĩa là ít lệnh gọi lãng phí hơn và các thao tác chính xác hơn.

Quyết định xây dựng hay dùng sẵn

Đây là một trong những quyết định thực tế nhất được kiểm tra trong đề thi. Khi nhóm của bạn cần tích hợp với một hệ thống bên ngoài, câu hỏi đặt ra là: xây dựng một MCP server tùy chỉnh hay dùng một server cộng đồng có sẵn?

Dùng server cộng đồng cho các tích hợp tiêu chuẩn:

  • Jira, GitHub, Slack, Linear, Notion — tất cả đều có MCP server cộng đồng được duy trì
  • Chúng bao phủ các use case tiêu chuẩn, được cộng đồng kiểm thử, và nhận cập nhật thường xuyên
  • Dùng chúng tiết kiệm thời gian phát triển và gánh nặng bảo trì

Chỉ xây dựng server tùy chỉnh khi:

  • Nhóm của bạn có quy trình làm việc đặc thù mà server cộng đồng không thể xử lý
  • Bạn cần logic nghiệp vụ tùy chỉnh được nhúng vào lớp tool
  • Bạn cần tích hợp với hệ thống nội bộ độc quyền không có server cộng đồng nào hỗ trợ

Đề thi luôn thiên về lựa chọn thực dụng. "Đánh giá server cộng đồng trước" luôn là câu trả lời đúng khi có liên quan đến một tích hợp tiêu chuẩn. "Xây dựng tùy chỉnh" chỉ đúng khi tình huống mô tả rõ ràng các yêu cầu đặc thù của nhóm mà server cộng đồng không thể đáp ứng.

Nâng cao mô tả tool của MCP

Một vấn đề tinh vi nhưng quan trọng: khi một tool MCP có mô tả sơ sài, agent có thể ưu tiên dùng các tool tích hợp sẵn (như Grep) ngay cả khi tool MCP có năng lực tốt hơn. Điều này xảy ra vì model có bối cảnh tốt hơn về các tool tích hợp sẵn — mô tả của chúng phong phú và chi tiết hơn.

Cách khắc phục: nâng cao mô tả tool MCP của bạn để giải thích chi tiết năng lực và đầu ra. Thay vì:

search_codebase: "Tìm kiếm mã nguồn"

Hãy viết:

search_codebase: "Thực hiện tìm kiếm mã nguồn theo ngữ nghĩa trên toàn bộ kho mã bằng đánh chỉ mục nhận biết AST. Trả về các hàm, class, và phương thức khớp cùng với đầy đủ ngữ cảnh bao gồm đường dẫn file, số dòng, và mã nguồn xung quanh. Chính xác hơn grep dựa trên văn bản khi tìm mã nguồn theo ý định thay vì khớp chuỗi chính xác. Dùng tool này thay vì Grep khi tìm kiếm mã nguồn theo chức năng thay vì nội dung chứa trong đó."

Mô tả được nâng cao này cung cấp cho model đủ bối cảnh để ưu tiên tool MCP khi nó thực sự có năng lực tốt hơn phương án tích hợp sẵn.

Khái niệm chính

.mcp.json cấp dự án được quản lý phiên bản và chia sẻ với cả nhóm. ~/.claude.json cấp người dùng mang tính cá nhân và không được chia sẻ. Dùng cú pháp ${ENV_VAR} để giữ thông tin xác thực ngoài phạm vi quản lý phiên bản.

Bẫy thi

Bẫy thi: Xây dựng một MCP server tùy chỉnh cho một tích hợp tiêu chuẩn như Jira

Các MCP server cộng đồng đã tồn tại cho các tích hợp tiêu chuẩn và nên được đánh giá trước. Xây dựng tùy chỉnh chỉ hợp lý cho các quy trình làm việc đặc thù của nhóm mà server cộng đồng không thể xử lý.

Bẫy thi: Đặt cấu hình MCP server dùng chung cho cả nhóm vào ~/.claude.json

~/.claude.json là cấp người dùng và mang tính cá nhân — nó không được quản lý phiên bản hay chia sẻ. Các server dùng chung cho cả nhóm thuộc về .mcp.json ở gốc dự án.

Bẫy thi: Commit trực tiếp thông tin xác thực vào .mcp.json thay vì dùng mở rộng biến môi trường

Thông tin xác thực trong quản lý phiên bản là một rủi ro bảo mật. Dùng cú pháp ${GITHUB_TOKEN} để mỗi lập trình viên tự thiết lập token cục bộ và secret không bao giờ lọt vào lịch sử kho mã.

Bẫy thi: Để mô tả tool MCP sơ sài, khiến agent ưu tiên dùng tool tích hợp sẵn

Model mặc định thiên về các tool nó hiểu rõ nhất. Mô tả MCP sơ sài sẽ thua kém mô tả chi tiết của tool tích hợp sẵn. Hãy nâng cao mô tả MCP để giải thích đầy đủ năng lực và đầu ra.

Tình huống luyện tập

Không tìm thấy câu hỏi luyện tập "q-2-4-001".

Bài tập thực hành

Cấu hình MCP server với phạm vi và biến môi trường

Bạn sẽ học được gì

  • Cấu hình MCP server cấp dự án trong .mcp.json để chia sẻ toàn nhóm
  • Dùng mở rộng biến môi trường để giữ thông tin xác thực ngoài phạm vi quản lý phiên bản
  • Phân biệt giữa cấu hình MCP cấp dự án và cấp người dùng
  • Hiển thị resource MCP để giảm các lệnh gọi tool mang tính thăm dò không cần thiết
  • Viết mô tả tool MCP nâng cao có thể cạnh tranh với mô tả tool tích hợp sẵn

Các bước

Vì sao: .mcp.json cấp dự án được quản lý phiên bản và chia sẻ với mọi thành viên trong nhóm khi họ clone kho mã. Đề thi kiểm tra liệu bạn có biết các server dùng chung cho cả nhóm thuộc về đây, không phải ~/.claude.json. Dùng server cộng đồng cho các tích hợp tiêu chuẩn luôn là lựa chọn đầu tiên đúng đắn.

Bạn sẽ thấy: Một file .mcp.json ở gốc dự án chứa một object mcpServers với ít nhất một mục server chỉ định command (ví dụ npx) và args (ví dụ -y @modelcontextprotocol/server-github).

Vì sao: Commit trực tiếp thông tin xác thực vào .mcp.json là một rủi ro bảo mật mà đề thi trừ điểm. Cú pháp ${VARIABLE_NAME} cho phép file cấu hình tham chiếu biến môi trường mà không chứa giá trị thật, giữ secret ngoài lịch sử kho mã.

Bạn sẽ thấy: Phần env trong cấu hình server của bạn chứa ${GITHUB_TOKEN} (không phải giá trị token thật). Chạy git diff xác nhận không có secret nào được staged để commit. Mỗi lập trình viên tự thiết lập token của mình cục bộ.

Vì sao: Cấu hình cấp người dùng trong ~/.claude.json mang tính cá nhân, không được quản lý phiên bản, và không chia sẻ với đồng nghiệp. Đề thi kiểm tra liệu bạn có biết hệ thống phân cấp phạm vi: .mcp.json cho server dùng chung nhóm, ~/.claude.json cho server cá nhân hoặc thử nghiệm.

Bạn sẽ thấy: Một file ~/.claude.json với một mục mcpServers cho một server cá nhân (ví dụ một tích hợp thử nghiệm bạn đang kiểm tra). File này KHÔNG nằm trong kho mã dự án và KHÔNG thuộc quản lý phiên bản.

Vì sao: Resource MCP cho agent khả năng nhìn thấy dữ liệu sẵn có mà không cần các lệnh gọi tool mang tính thăm dò. Nếu không có resource, một agent có thể phải gọi list_tables rồi describe_table cho từng bảng, lãng phí nhiều lệnh gọi tool. Một resource schema giúp thông tin đó có sẵn ngay lập tức.

Bạn sẽ thấy: Một định nghĩa resource MCP hiển thị dữ liệu có cấu trúc (ví dụ danh sách các bảng cơ sở dữ liệu kèm kiểu cột, hoặc mục lục tài liệu) truy cập được qua một URI như db://schema/main. Resource nên có name, description, và mimeType.

Vì sao: Khi một tool MCP có mô tả sơ sài, agent ưu tiên dùng tool tích hợp sẵn như Grep vì mô tả của chúng phong phú và chi tiết hơn. Đề thi kiểm tra liệu bạn có biết mô tả MCP nâng cao là cần thiết để cạnh tranh với tool tích hợp sẵn về mức độ ưu tiên lựa chọn.

Bạn sẽ thấy: Các mô tả tool dài 3-5 câu, giải thích tool làm gì, trả về gì, khi nào dùng, và so sánh thế nào với phương án tích hợp sẵn. Ví dụ, một mô tả tool search_codebase nói rõ rằng nó chính xác hơn Grep cho tìm kiếm theo ngữ nghĩa.

Nguồn tham khảo